针对发布者/订阅者的RabbitMQ的API设计

时间:2016-08-04 03:11:55

标签: rabbitmq api-design

TL; DR - 什么是通过REST API向使用者公开RabbitMQ的最佳方式?

我正在创建一个API来发布和使用来自RabbitMQ的消息。在我目前的设计中,发布者将发出POST请求。我的API会将POST请求路由到交换机。通过这种方式,发布者在发布时不必知道服务器地址,交换名称等。

现在消费者部分是我不知道如何继续的地方。

一开始就没有队列。当新的消费者想要订阅TOPIC时,我将创建一个队列并将其绑定到交换机。我需要帮助解答几个问题的答案 -

  1. 为消费者创建队列后,让消费者从该队列中获取消息的下一步是什么?
  2. 我让消费者​​从队列中请求一批消息(比如50条消息)。然后,一旦我收到消费者的确认,我将从队列中发送下50条消息。如果我没有收到确认,我会将50条消息重新排队回队列。在开放和关闭消费者和我的API之间的连接方面,这不是很昂贵吗?
  3. 如果有更好的方法,请建议

1 个答案:

答案 0 :(得分:0)

通常,您将RMQ置于REST API之后的想法是一个很好的想法。您不希望直接向世界公开RMQ。

针对具体问题:

  

为消费者创建队列后,让消费者从该队列中获取消息的下一步是什么?

你读过这些教程吗?对于您正在使用的语言,我会从那里开始:http://www.rabbitmq.com/getstarted.html

  

在打开和关闭消费者与我的API之间的连接方面,这不是很昂贵吗?

不要为每批邮件打开和关闭连接。

您的应用程序实例(“消费者”应用程序)应该只有一个连接。只要您需要,该连接就会保持打开状态 - 可以根据需要调用RabbitMQ。

我通常会在应用启动后立即打开我的RMQ连接,并将其保持打开状态,直到该应用关闭。

在消费者应用程序中,使用该单个连接,您将通过该连接创建多个通道。通道是实际工作的地方。

根据您的语言,每个线程将有一个通道;每个队列消耗一个通道;等

与连接不同,您可以非常快速地创建和销毁频道。

更具体地说,您可以通过在消费者处设置消费者预取限制,然后在处理消息后确认消息来处理批处理。