问题现象:RabbitMQ double ack 报错

16:50:10.134 ERROR 17788 ---  o.s.a.r.c.CachingConnectionFactory       :
Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)

使用rabbitmq的时候总是报错信道关闭,而且这个错居然不影响消息队列运行。
原因是因为进行了两次消息确认double ack.

yml中配置手动签收模式失效,被注解注入的SimpleRabbitListenerContainerFactory覆盖,而它默认使用了自动签收。但是消费消息的时候又手动进行channel.basicAck(deliveryTag, false),于是导致了两次ack,所以报错。
解决方法是在rabbitmq的factory中指定ack模式factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);

yml配置

server:port: 9000spring:application:name: mall-orderdatasource:username: rootpassword: 123456url: jdbc:mysql://192.168.217.129:3306/mall_oms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.jdbc.Drivercloud:nacos:discovery:server-addr: localhost:8848rabbitmq:host: 192.168.217.129#开启发送端确认publisher-confirms: truepublisher-returns: truetemplate:mandatory: true  #只要消息抵达队列,以异步方式优先回调returnsConfirmlistener:direct:acknowledge-mode: manual # 消费端手动ack消息    thymeleaf:cache: falsesession:store-type: redis    redis:host: 192.168.217.129           

config配置

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AcknowledgeMode;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;/*** @author jl* Created on 2020/8/23*/
@Configuration
@Slf4j
public class RabbitMQConfig {@Autowiredprivate RabbitTemplate rabbitTemplate;@Beanpublic SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory, MessageConverter messageConverter) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(messageConverter);factory.setAcknowledgeMode(AcknowledgeMode.MANUAL);return factory;}/*** 消息对象序列化器*/@Beanpublic MessageConverter messageConverter() {return new Jackson2JsonMessageConverter();}/*** 定制RabbitTemplate,确保消息不丢失* 生产端消ConfirmCallback,ReturnCallback* 消费端ACK机制*/@PostConstructpublic void initRabbitTemplate() {// ConfirmCallback消息抵达交换机的回调rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {/*** 交换机(Exchange)收到消息就会回调* CorrelationData 当前消息的唯一关联数据* ack 消息是否成功送达* cause 失败的原因*/@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {log.info("ID:[{}]的消息成功投递到交换机",correlationData.getId());}});// ReturnCallback消息抵达队列的回调rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {/*** 只要消息没有投递给指定的队列就会触发该回调* @param message 投递失败的消息* @param replayCode 回复的状态码* @param replayText 回复的文本内容* @param exchange 交换机* @param routingKey 路由key*/@Overridepublic void returnedMessage(Message message, int replayCode, String replayText, String exchange, String routingKey) {System.out.println(message);log.error("ID:[{}]的消息失败投递到队列",message.getMessageProperties().getMessageId());}});}
}

rabbitmq reply-text=PRECONDITION_FAILED - unknown delivery tag 1相关推荐

  1. (reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 1, class-id=60, method-id=80)

    RabbitMQ 报错:channel is already closed due to channel error; protocol method: #method<channel.clos ...

  2. java.lang.ClassFormatError: Unknown constant tag 100 in class file java/sql/Driv

    [color=red]linux下启动tomcat报这个错: [/color] Aug 27, 2014 1:29:19 PM org.apache.catalina.core.AprLifecycl ...

  3. RabbitMQ消费端报:delivery acknowledgement on channel 5 timed out. Timeout value used: 1800000 ms. This t

    场景: 消费端日志控制台报如下错误: 2022-11-25 13:18:29.354 ERROR 13368 --- [.15.178.36:5672] o.s.a.r.c.CachingConnec ...

  4. RabbitMQ问题系列:(一)

    1 监听方法不能有返回值 警告信息: org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listene ...

  5. RabbitMQ 消费者确认(Consumer Acknowledgements)

    摘要 RabbitMQ关于数据安全有两个特性:发布者确认(Publisher Confirms)和消费者确认(Consumer Acknowledegements).前者用于MQ服务器(broker) ...

  6. RabbitMQ Work Queues 消息确认

    RabbitMQ Work Queues 简介 Hello Word中只是简单介绍,下面开始重点分析 例如:当我们有复杂需求,我们需要提升效率,毕竟只有一个消费者难免处理不过来,就如官网中所提到的一样 ...

  7. Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=406, reply-text=

    完整错误 CachingConnectionFactory.java:1278 - Channel shutdown: channel error; protocol method: #method& ...

  8. SpringBoot-Rabbit MQ-设置手动确认ACK-Channel shutdown异常

    记一次 SpringBoot-Rabbit MQ设置手动ACK时的异常,配置文件设置了 spring.rabbitmq.listener.simple.acknowledge-mode=manual/ ...

  9. rabbit mq Consumer Acknowledgements and Publisher Confirms 翻译

    原文地址 Consumer Acknowledgements and Publisher Confirms 消费者消息的Ack机制和生产者发布消息的确认机制 Overview This guide c ...

最新文章

  1. Windows设置共享文件夹并允许写入--windows shared folder write access
  2. CUBRID学习笔记 1 简介 cubrid教程
  3. form表单中,file选择图片后预览
  4. 剖析 | torch.nn.functional.softmax维度详解
  5. webpack 4.0 小记
  6. 利用ant构建 jsp-servlet-class-jar
  7. lucene_indexWriter说明、索引库优化
  8. VC中_T()与L区别(转)
  9. Jquery学习总结(1)——Jquery常用代码片段汇总
  10. BC 2015在百度之星程序设计大赛 - 预赛(1)(KPI-树董事长)
  11. 263. Ugly Number
  12. python做出代码结构图_数据结构之图的代码实现(使用Python实现)
  13. 国外服务器和网站,国外服务器网站好吗?国外服务器网站和国内有什么区别?...
  14. 计算机自我检测方法,电脑问题的自我检测方法有哪些?
  15. 解决latex伪代码标题序号问题
  16. php支付宝刷脸api,支付宝人脸识别
  17. 火剪剪辑系统,火剪矩阵系统,火剪系统源码框架
  18. 使用计算机进行工业模型设计属于,【工业设计论文】计算机辅助工业设计教学改革分析(共3797字)...
  19. 皮卡洞察报告2021版——附下载链接
  20. Effective C++ 学习笔记 第七章:模板与泛型编程

热门文章

  1. UE4之生成pak文件
  2. Greenplum初始化数据库时出现gpadmin-[ERROR]:-gpstart error: Do not have enough valid segments to start the arr
  3. [译]Unity3D Shader教程(二)HLSL
  4. MVC 音乐商店 第 3 部分:Views 和 ViewModels
  5. 洛谷1781 宇宙总统
  6. i78700k配什么显卡好_八代i7 8700配什么显卡好?intel酷睿i7-8700适合搭配的显卡推荐...
  7. 单相干式变压器红外图像数据集
  8. Android——猜数字小游戏
  9. Zabbix unreachable poller processes more than 75% busy
  10. DFS 简单的剪枝和状态压缩 海贼王之伟大航路