+++++++++++++++++++++
如图,我在尝试使用rabbitmq的延时队列
延时的效果是可以实现的
问题:
每次消息由死信队列转发到一般队列以后,消费者通过监听能捕获到,但是那个消息一直在队列里面。请问是为什么?要怎么解决?
请大神指教,谢谢!
+++++++++++++++++++++
如图,我在尝试使用rabbitmq的延时队列
延时的效果是可以实现的
问题:
每次消息由死信队列转发到一般队列以后,消费者通过监听能捕获到,但是那个消息一直在队列里面。请问是为什么?要怎么解决?
请大神指教,谢谢!
开启了手动ack,没有进行手动ack操作,消息自然还是会留在队列里面的,需要进行手动ack操作
参考如下代码
@RabbitListener(queues = RabbitMqConfig.REQUEST_LOG_QUEUE)
public void process(String content, Channel channel, Message message) throws IOException {
try {
log.info("{}", message);
RequestLog requestLog = JSON.parseObject(message.getBody(), RequestLog.class);
final int exist = requestLogDao.existTable();
if (exist == 0) {
requestLogDao.createTable("t_request_log");
}
// 日志入库操作
this.requestLogDao.insert(requestLog);
// 手动ack
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
} catch (Exception e) {
e.printStackTrace();
log.error("消费这监听异常,转入错误队列");
//转入异常队列
rabbitTemplate.convertAndSend(RabbitMqConfig.ERROR_LOG_QUEUE,message);
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
}
}