首页 > 解决方案 > 带有 RabbitMQ 生产者的 REST 端点

问题描述

假设我有一个 REST 端点可以执行此操作:

  1. 接收一个 json 正文,进行一些映射,然后通过消息生产者发送消息。(兔MQ)

    1. 生产者是异步的。

    2. 我在 2 中有一个生产者的消费者,它将执行一些业务逻辑并发布回复。

现在,我需要在我的休息端点进行一些交互后收到回复。

由于我的休息呼叫的客户端正在等待回复,因此想到的解决方案是让端点在短暂超时的情况下侦听回复队列,以便我可以通过 REST 返回响应。

我的想法是否正确,或者我应该有一个阻塞生产者并使用 RPC,就像这里所说的那样:https ://www.rabbitmq.com/tutorials/tutorial-six-java.html

我想找到最优化的解决方案。

注意:我没有使用 Spring,因为我正在学习所有这些概念以便有一个清晰的理解。

标签: javarabbitmq

解决方案


从服务器上的 HTTP 调用在队列中生成很好。

等待队列并在其响应中回复 HTTP 调用不是首选方式。

  1. 一个回复队列上可能有很多消息。如果您使用一条用于不同客户端调用的消息会发生什么?您是否将消息传递给适当的消费者?如何找到合适的消费者?您可以重新排队浪费周期的消息。一条消息可能永远留在队列中。

  2. 如果请求队列被淹没,您可能需要多次轮询才能获得结果。如果您在客户投票之前收到回复,则需要存储回复,以便在下次通话时将其传递给客户。

这些只是触及可能出现的问题的表面。如果您的客户端确实是 HTTP 客户端,则可以使用上述内容来涵盖应用程序的重要基础。

一个更好的解决方案是在回复队列上写一个消费者,它会调用消费者的某个端点。但是,它仍然需要您考虑服务器和客户端的故障和重试等情况。

我没有回答你的问题,但给了你一些思考的要点。请不要将此标记为已接受的答案。


推荐阅读