【问题标题】:RabbitMq message re deliveryRabbitMq 消息重发
【发布时间】:2017-04-27 17:34:09
【问题描述】:

假设我与 rabbit 建立了连接,并且我已经提取了 1000 条消息,但尚未确认它们,因为它们正在由 Blocking 集合中的单个线程处理。

现在假设我的连接中断并自动恢复。此时服务器上的所有这些消息都将重新排队等待传递。但是我在本地仍然有它们的副本,带有旧的交付标签。

这让我相信我应该通过清除本地队列来处理连接或通道关闭事件。

你能确认这是真的吗?

【问题讨论】:

    标签: c# rabbitmq


    【解决方案1】:

    是的,就是这样。这些消息将被重新传递。

    因此,除了清除我们在本地排队的消息之外,您可能还需要考虑预取,以免本地排队的消息太多。

    你的策略是拉 1000 个,处理它们,然后最后全部 ack 吗?我可以看到,由于性能原因,您可能会这样做,因此您可以发送一个带有 multiple=true 的 ack,但它确实会带来额外的重新交付和重复处理风险。

    【讨论】:

      【解决方案2】:

      您是对的。如果您一次处理一条消息,您可以将预取计数设置为 1,您也可能不需要在本地清除任何消息。

      【讨论】:

        猜你喜欢
        • 2014-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多