故障转移后 Artemis 收到重复消息

Artemis receives duplicate messages after failover

为了测试失败时的通信性能,我给每条消息编号,连续发送,每秒发送30条左右。并且发现即使设置了ha策略,消费者也会在failover/failback后重复收到少量收到的消息。这正常吗?

我知道Artemis通过给消息赋予一个唯一值来提供自动重复消息检测,可以避免重复发送消息,但是重复收到的消息有不同的“client ack messageID”。这是否意味着它无法阻止接收重复消息?

根据您编写客户端的方式,您可能会在故障转移时得到重复项,因为在发生故障时某些消息确认可能会丢失。例如,如果您收到来自代理的消息并对其进行处理,但代理在您发送确认之前发生故障(或在确认传输过程中发生故障),那么备份仍将拥有您已经收到的消息并将再次发送它.

如果您不希望重复成为您客户的问题,那么您有几个选择:

  1. 在您的客户端上使用事务并且在确认成功确认之前不要提交。如果确认失败则回滚事务。
  2. 确保您的消费者是幂等的,这样重复并不重要。