【发布时间】:2018-06-05 06:30:41
【问题描述】:
我有一个系统,它公开了一个带有一组丰富的 CRUD 端点的 REST API 来管理不同的资源。 REST API 也被使用 Ajax 执行调用的前端应用程序使用。
我想让其中一些调用异步并增加可靠性。
显而易见的选择似乎是消息代理(ActiveMQ、RabbitMQ 等)。
以前从未使用过消息代理,我想知道它们是否可以“放在”REST API 之前而无需重写它们。
我不想只通过消息系统访问 REST API:对于某些端点,调用必须始终是同步的,可靠性不太重要(主要是因为在发生错误时用户会立即收到反馈)。
对于这个用例来说,完整的 ESB 会是更好的选择吗?
【问题讨论】:
-
您是否打算通过重新开发前端应用程序将消息放入队列来“隐藏”Rest API?或者有一个使用队列实现的 Rest API 的新实现?
-
我想对前端应用程序隐藏 REST API。消息传递系统也可以用于服务器到服务器的通信。 API 将可以直接访问,但它的一些端点可以增强以增加可靠性。理想情况下,我还想使用 WebSockets 在浏览器端定义订阅者。
-
根据您的后端配置,新请求通常在它们自己的线程中处理。因此我猜想从 JS 到你的后端的异步调用不应该是一个真正的问题。不过,您能澄清一下您需要哪些可靠性限制吗?最多一次消费或丢失从前端到后端(或响应)的消息?通常你的前端会填充一个队列,在后端触发一些消费逻辑(类似于通过 HTTP 请求调用的 API),因此我不会将 MQ 放在 API 前面
-
@RomanVottner 可能我问了太多问题。我最感兴趣的是向现有的 REST API 添加可靠性和异步消息。 API 不仅会被前端调用。我有一些端点需要很长时间才能完成所需的任务。我希望客户立即收到反馈,同时我想确保消息是否已被消息代理发送和接收,它会被传递(迟早)。
-
您可能正在寻找一种 HTTP 方式(不是 REST;很多人将后者与前者混淆)。立即返回响应的一种简单方法是发送初始 POST 请求,该请求会在新线程中触发服务器上长时间运行的计算。同时,服务器将使用 202 Accepted 确认接收,其中包含带有 URI 的 Link Header,客户端可以调用以轮询状态更新。同时,服务器可以继续其任务,客户端不时要求状态更新。请求完成后返回 200 OK 并返回结果
标签: rest api esb messagebroker