【问题标题】:Ensure delivery of message, RabbitMq确保消息传递,RabbitMq
【发布时间】:2015-10-02 03:08:51
【问题描述】:
我知道常见的方法是在发布消息之前创建消费者队列,但是这里的耦合似乎非常紧密,通常我不想知道有多少队列从这个交换中消耗以及每个队列得到多少消息,我们如何在将服务器与消费者解耦的同时保持可靠性?
在此图像上,客户端应用程序仍然需要知道是否有任何服务器队列可用于处理身份验证请求。因为如果没有队列,消息将是死信,我不相信没有人想过这个?或者我们假设这个队列总是存在的(它们是持久的)?
【问题讨论】:
标签:
rabbitmq
messaging
enterprise-integration
【解决方案1】:
RabbitMQ 和 AMQP 0.9.1 通常的工作方式是不将消息的发送者耦合到消费者。您可以使用许多不同的方法查询交换,以找出绑定到它的队列,但是在您发送消息时,除非您自己实际创建队列和绑定,否则您永远无法确定究竟什么是可用的。
一种可以确定消息未放入队列的方法是使用publisher confirms。另一种可能的异步方式也是在标准 RabbitMQ 日志交换上侦听您的消息是 DLQ 的通知。
【解决方案2】:
您可以使用 queue-pooling 来保证可靠的消息传递。在这种情况下,客户端应用程序不需要明确知道可用队列——它只是向QueuePool 询问下一个可用队列。如果QueuePool 耗尽,QueuePool 将以客户端通过高阶函数定义的方式返回一个队列。更多信息here。