1

我使用 RabbitMQ 铲子插件(动态铲子,见下文)通过不可靠的 WAN 链接在两个 RabbitMQ 代理之间提供单向消息传递。我在 RabbitMQ 服务器日志中看到定期连接丢失。

两个代理的 AMQP 设置的相关部分是相同的:一个交换(扇出,持久)和一个队列(持久)。消费应用程序要求接收消息的顺序与它们在发送端产生的顺序相同。

观察到的行为似乎表明情况并非如此,可能是由于重新传输等。RabbitMQ 铲子插入是否保留消息排序而不会丢失消息?需要哪些配置选项?

铲声明

4

1 回答 1

2

为了确保消息排序,应配置以下参数:

 "prefetch-count" : 1
 "ack-mode"       : "on-confirm"

prefetch-count在任何时候通过铲子复制的未确认消息的最大数量。默认值为 1000。

ack-mode确定铲子应如何确认消息。如果设置为on-confirm(默认值),则消息在目标确认后向源代理确认。这可以在不丢失消息的情况下处理网络错误和代理故障,并且是最慢的选项。如果设置为 on-publish,则消息在目标发布后会向源代理确认。这可以在不丢失消息的情况下处理网络错误,但在代理失败的情况下可能会丢失消息。如果设置为 no-ack,则不使用消息确认。这是最快的选择,但在网络或代理失败的情况下可能会丢失消息。

更多RabbitMQ的铲子机制相关信息请参考官方文档:https ://www.rabbitmq.com/shovel-dynamic.html

于 2017-10-10T14:51:40.163 回答