如何解决Artemis 在故障转移后收到重复的消息
为了测试发生故障时的通信性能,我对每条消息进行编号并连续发送,每秒发送大约 30 条消息。并且发现即使设置了ha策略,在failover/failback之后,消费者也会反复收到少量接收到的消息。这正常吗?
我知道Artemis通过给消息一个唯一值来提供自动重复消息检测,这样可以避免重复发送消息,但是重复接收的消息有不同的“客户端确认消息ID”。这是否意味着它不能防止接收重复的消息?
解决方法
根据您编写客户端的方式,您可能会在故障转移时获得重复,因为在发生故障时某些消息确认可能会丢失。例如,如果您从代理收到一条消息并对其进行处理,但是代理在您发送确认之前失败(或在确认传输过程中失败),则备份仍将保留您已经收到的消息并将再次发送它.
如果您不希望重复对您的客户造成问题,那么您有几个选择:
- 在您的客户端上使用事务,在确认成功之前不要提交。如果确认失败,则回滚事务。
- 确保您的消费者是幂等的,因此重复并不重要。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。