发送到死信队列中的消息需要取出来进行消费,转发到原有队列重新消费
一是在客户端做幂等性处理
二是消息有唯一编号,消费完的消息,存到消息表里,这样做去重。
第二种对消息系统的吞吐量有巨大的需求,能用客户端去解决的话,最好用客户端的幂等性
如何保证消息不被重复消费?
默认情况下就不会被重复消费,ack消息确认机制
activemq会重试,重试6次
1.你要保证调用方是幂等的。幂等:多次调用和一次调用结果一致(查询,更新
2.程序不是幂等的,需要手动做一些操作:
1)维护一个map,在map中对消息进行记录,有内存泄露的风险
2)维护一张表(mysql,redis):消息消费表
好处:即使你的 mq不可用,我也可以把源源不断发送过来的消息记录下来,等你的mq上线了,持续消费
来自于硬件的信息,接口文档中明确说明,接收信息后不能有太长的处理时间(解析,分类,存入数据库)
接收一条消息,立马发送到activemq进行后续处理
消息表记录每条消息的内容,消费状态
3)消息重试6次依然失败,会进入死信队列,等服务正常之后消费死信队列中的消息
举例:例子哪里来呢?
生产环境中会遇到的bug,异常情况