以RabbitMQ为例,默认情况下 RabbitMQ 是自动ACK机制,就意味着 MQ 会在消息发送完毕后,自动帮我们去ACK,然后删除消息的信息。
这样依赖就存在这样一个问题:
如果消费者处理消息需要较长时间,最好的做法是消费端处理完之后手动去确认。
1、配置文件:
rabbitmq:host: ${yun.activity.rabbitmq.host}port: ${yun.activity.rabbitmq.port}username: ${yun.activity.rabbitmq.username}password: ${yun.activity.rabbitmq.password}virtual-host: ${yun.activity.rabbitmq.virtual-host}publisher-confirms: truepublisher-returns: truetemplate:mandatory: truelistener:simple:acknowledge-mode: manual
通过acknowledge-mode: manual 设置为手动设置Ack模式。
2、消费者:
@RabbitListener(queues = "activity-eleven-first-notify", containerFactory = "activityElevenCainerFactory")public void processNormalOrder(Message message, Channel channel) {try {dealInfo(message);