背景
由于rabbitmq发送端和消费端不在同一个系统中。参考了网上的一些配置,只在发送端配置了消息消费确认,而每次消费端消费时,并没有确认消费,也是消费完直接删除消息了。
原因
发送端与消费端需要分开配置。如果消费端不配置消息确认的话,则默认无需确认,直接消费完后即删除。
消费端需配置
spring:
rabbitmq:
listener: #加了2下面2个属性,消费消息的时候,就必须发送ack确认,不然消息永远还在队列中
direct:
acknowledge-mode: manual
simple:
acknowledge-mode: manual
发送端配置
spring:
#rabbitmq
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
# 发送者开启 confirm 确认机制
publisher-confirms: true
# 发送者开启 return 确认机制
publisher-returns: true
消费端代码
监听代码、
@RabbitListener(
bindings =
{
@QueueBinding(value = @Queue(value = RabbitConstant.VERSION_UPDATE_COMMUNICATION_QUEUE_NAME, durable = "true"),
exchange = @Exchange(value = RabbitConstant.VERSION_UPDATE_COMMUNICATION_EXCHANGE, type = "topic"),
key = RabbitConstant.VERSION_UPDATE_COMMUNICATION_ROUTINGKEY)
})