方案:消息落库,对消息状态进行打标
步骤:
- 把消息发送MQ一份,同时存储到数据库(Redis)一份。开启消息发送确定机制,然后进行消息的状态控制,发送成功1,发送失败0。
- 必须结合应答ACK(确认字符)来完成。对于那些如果没有发送成功的消息,可以采用定时器进行轮询发送。
示例
步骤:
- 消费者开始手动ack消息确定
- 尝试消息重投
- 对重投还是消费失败的消息拒绝确认
- 把拒绝确认的消息扔到死信队列中,并记录到数据库,再做好消息预警
示例
需要开启下面的配置
spring.rabbitmq.listener.acknowledge-mode=manual #消费者开启手动ack消息确认
spring.rabbitmq.listener.default-requeue-rejected=false #设置为false,会重发消息到死信队列
Consumer示例
消费端手动确认AckConsumer
- 延时消息