我有一个系统,它使用一组丰富的CRUD端点公开REST API来管理不同的资源。 REST API也由使用Ajax执行调用的前端应用程序使用。
我想让其中一些调用异步并增加可靠性。
显而易见的选择似乎是消息代理(ActiveMQ,RabbitMQ等......)。
从来没有使用过消息代理,我想知道它们是否可以“放在”REST API之前,而不必重写它们。
我不想仅通过消息传递系统访问REST API:对于某些端点,呼叫必须始终是同步的,并且可靠性不太重要(主要是因为如果出现错误,用户会收到即时反馈)。
完整的ESB是否可以成为此用例的更好选择?
如果我理解您的问题,您希望将API端点“注册”为订阅者,以便它可以接收发送到给定队列的消息。
我不认为可以配置消息代理来执行此操作。
例如,如果要使用消息代理,则生产者和订阅者都需要使用JMS API。
我不知道解决方案是否可以实现将执行相应API调用的订户。在这种情况下,可靠性受到影响,因为消息将在执行API调用之前出列。如果订阅者在API的相同进程中运行,则有意义,但在这种情况下,不清楚为什么要使用REST API而不是库。
IMO @EligioEleuterioFontana您对以下角色有误解:
这是两个不同的子系统,提供不同的服务。
现在,让我们根据您的要求解释他们的角色:
如果我已经做到了,那么我会回答:
您可以将Api的某些端点同步。当然!然后让其他人利用一些最终的一致性(即对于那个请求,我将在稍后处理它(即使后来在5秒之后)并且只是将响应返回给客户说“谢谢!得到它!我会做的很快“)...这是你所追求的异步工作流程。
Api端点需要简单,简洁,并且希望非常稳定。当你改变事物时,你在幕后做的事情将被隐藏在远离客户的地方。这包括使用消息代理。
无论如何,我对我如何看待REST Api和Message Brokers以及它们如何相互关联有所了解。
可能值得研究Google Cloud子/ pub? - https://cloud.google.com/pubsub/docs/overview