我使用RabbitMQ铲插件(动态铲,见下文)通过不可靠的WAN链路在两个RabbitMQ代理之间提供单向消息传递。我看到RabbitMQ服务器日志中的常规连接丢失。
AMQP设置的相关部分对于两个经纪人都是相同的:一个交换(扇出,持久)和一个队列(持久)。消费应用程序要求以与发送方生成的消息相同的顺序接收消息。
观察到的行为似乎表明情况并非如此,可能是由于重传等问题.DuckMM挖掘器是否会保留消息顺序而不会丢失消息?有哪些必要的配置选项?
答案 0 :(得分:2)
为确保消息排序,应配置以下参数:
DataSource.Error:ODBC:ERROR[HY000]Error while executing the query
prefetch-count 在任何时候通过铲子复制的最大未确认消息数。默认值为1000。
ack-mode 确定铲子应如何确认消息。如果设置为确认(默认值),则在目标确认消息后,将向源代理确认消息。这可以处理网络错误和代理故障而不会丢失消息,并且是最慢的选项。如果设置为on-publish,则在源代理在目标上发布后,将向源代理确认消息。这可以处理网络错误而不会丢失消息,但在代理失败时可能会丢失消息。如果设置为no-ack,则不使用消息确认。这是最快的选择,但在网络或代理失败时可能会丢失消息。
有关RabbitMQ铲斗机制的更多信息,请参阅官方文档:https://www.rabbitmq.com/shovel-dynamic.html