activemq重发了两次怎么解决

activemq设置了消息确认以及超时重发,现在的问题是,消费端进程卡死,首先超时之后,消息重发了一次,然后把卡死的进程结束之后,又触发了rollback,导致消息又重发了一次,我想问问activemq重发消息时,不会判断是否处理过相同messge_id的消息,还是说重发时message_id变了,还是有什么地方可以设置的?谢谢

阅读 2k
1 个回答

一般来说mq消息传递过程中消息传递的保证性一般有三种状态

最多一次(at most once): 消息可能丢失也可能被处理,但最多只会被处理一次。

可能丢失 不会重复

至少一次(at least once): 消息不会丢失,但可能被处理多次。

可能重复 不会丢失

精确传递一次(exactly once): 消息被处理且只会被处理一次。

一般来说要实现消息精确只传递一次是比较困难的,所以基本上基本mq的接口逻辑都会做自己做幂等性处理.我也没使用activemq,不确定messge_id机制,不过一般不会变,你可以自己尝试一下.你也可以自己生成唯一键与消息一起发送.每次成功消费,就对这个唯一键进行记录.防止重复消费,或者直接在存储层进行处理,比如设置唯一键,当出现重复消费时,只会插入失败,并不会执行成功

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进