说我有一个与兔子的连接,我已经提取了1000条消息,但尚未确认它们,因为它们正在被阻塞集合中的一个线程处理。
现在假设我的连接死了并自动恢复。此时,服务器上的所有这些消息都将重新排队等待传送。但我仍然在本地拥有它们的副本,使用旧的Delivery标签。
这让我相信我应该通过清除本地队列来处理连接或通道关闭事件。
你能证实这是真的吗?
答案 0 :(得分:0)
是的,就是这样。这些消息将被重新传递。
因此,除了清除本地排队的邮件之外,您可能还需要考虑预取,这样就不会在本地排队这么多邮件。
你的策略是拉1000,处理所有,然后最终把它们全部搞定?我可以看到,由于性能原因,您可能会这样做,因此您可以发送一个具有multiple = true的单个ack,但它确实会引入额外的重新传递和重复的处理风险。
答案 1 :(得分:0)
你是对的。如果你一次处理一条消息,你可以将预取计数设置为1,你也可以不需要在本地清除任何消息。