csdn_sqj 2020-08-12 10:59 采纳率: 40%
浏览 748
已采纳

rabbitmq 延时队列,消息被监听到以后,还在队列里面

图片说明
图片说明
图片说明
+++++++++++++++++++++
如图,我在尝试使用rabbitmq的延时队列
延时的效果是可以实现的
问题:
每次消息由死信队列转发到一般队列以后,消费者通过监听能捕获到,但是那个消息一直在队列里面。请问是为什么?要怎么解决?

请大神指教,谢谢!

  • 写回答

2条回答 默认 最新

  • 路漫漫兮其修远兮 2020-08-14 15:07
    关注

    开启了手动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);
            }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题