首先消息可靠性这个问题需要从三个方面进行分析:
第一点:消费者处理消息导致消息丢失
1.mq没有发送到交换机
2.消息发送到了交换机,但是交换机没有路由到队列
第二点:mq宕机导致消息丢失
第三点:消费者处理消息导致消息丢失
1.消费者拿到消息没有进行消费就宕机了,
2.消费者拿到消息进行处理出现了异常,导致消息丢失。
关于第一点的处理方法:
开启生产者消息确认机制(2种)
1.publish-confirm
设置配置文件
设置回调方法setConfirmCallBack,注意该方法只能被调用一次
如果生成者成功将消息发送给交换机返回ack,否则返回nack
2.publish-return
设置配置文件
设置回调方法setReturnCallBack,注意该方法只能被调用一次
如果生成者成功将消息发送给交换机返回ack,否则返回nack
关于第二点的处理方法:
对于字符串消息会默认开启消息持久化
关于第三点的处理方法:
开启消费者确认机制
设置重试策略