发布确认机制是保证消息可靠性的第一步,发布确认保证我们知道消息是否成功到达队列中,返回ack则代表成功,nack则代表失败。使用这个特性,我们需要设置RabbitTemplate的mandatory属性

rabbitTemplate.setMandatory(true);

以及ConnectionFactory的publisherConfirms属性

connectionFactory.setPublisherConfirms(true);

这时我们可以在RabbitTemplate上设置setReturnCallback监听来接收MQ服务器返回的状态信息

rabbitTemplate.setConfirmCallback(confirmCallback);

对于消息的确认,我们只需要设置RabbitTemplate.ConfirmCallback的回调方法

ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {if(!ack){logger.info("打印异常处理....");}}
};

我们每次发送send请求时,都会执行相应的ack,其中correlationData是生产者在发送数据时可以携带的相关信息,比如消息唯  一属性

CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());

RabbitTemplate只允许设置一个callback方法,你可以将RabbitTemplate的bean设为单例然后设置回调,但是这样有个缺点是使  用RabbitTemplate的地方都会执行这个回调,如果直接在别的地方设置,会报如下错误

only one ConfirmCallback is supported by each RabbitTemplate

可以通过将RabbitTemplate的作用域设为@Scope,每次bean都是新的,来解决这个问题

@Bean
@Scope("prototype")
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);template.setMandatory(true);template.setMessageConverter(new SerializerMessageConverter());return template;
}

Only one ConfirmCallback is supported by each RabbitTemplate相关推荐

  1. Only one ConfirmCallback is supported by each RabbitTemplate 解决办法

    Only one ConfirmCallback is supported by each RabbitTemplate 解决办法 错误原因: spring中Bean默认是使用的的单列模式,不巧的是R ...

  2. RabbitMQ 入门到应用 ( 六 ) 消息可靠性

    7.RabbitMQ可靠性投递 为了保证信息不丢失, 可靠抵达,引入确认机制 消息从生产者传递到消费者的过程中, 不同的阶段使用不同的确认方式. 7.0.准备请求 一次性发送10 个消息 通过 new ...

  3. 分布式电影票务系统后端部分功能开发

    服务与接口分析 用户服务 注册 登录 密码修改 头像修改 账户注销 电影服务 查看电影详情 增加电影 通过类别查看电影列表 查看演员详情 查看某电影演员列表,redis->mysql 影院服务 ...

  4. SpringBoot2.x RabbitMQ Nacos Nacos-Config

    文章目录 一.依赖配置 1. 引入依赖 2. 配置文件 3. 主配置 二.生产者代码代码Conding 2.1. 发送客户端 2.2. 确认机制 2.3. 消息 return机制 2.4. contr ...

  5. (需求实战_终章) SpringBoot2.x 整合RabbitMQ

    文章目录 1. maven依赖 2. MainConfig 3. application.properties 4. 发送字符串 生产者 5. 发送对象 生产者 6. 接收字符串客户端 7. 接收对象 ...

  6. RabbitMQ详解及其特性

    最近在准备面试,发现之前学习的RabbitMQ基本都忘了,于是乎,趁着复习准备的机会,顺便做一些RabbitMQ的知识整理工作 要了解RabbitMQ,首先需要了解什么是MQ 1.MQ(Message ...

  7. RabbitMQ总结

    RabbitMQ 一.什么是RabbitMQ 1.MQ(Message Queue)消息队列 ①异步处理 ②应用解耦 ③流量削峰 2.背景知识介绍 ①AMQP高级消息队列协议 ②JMS ③二者的联系 ...

  8. RabbitMQ实战教程

    RabbitMQ实战教程 1.什么是RabbitMQ 1.1 MQ(Message Queue)消息队列 1.1.1 异步处理 1.1.2 应用解耦 1.1.3 流量削峰 1.2 背景知识介绍 1.2 ...

  9. RabbitMQ 限流 流量削峰

    以下是基于spring cloud 2.1.4+rabbitmq-server-3.8.22的实现代码 设置: spring:rabbitmq:port: 5672host: localhostuse ...

最新文章

  1. 4.2 开发者选项--电源错误报告的适配
  2. hibernate正向生成数据库表以及配置——Student.java
  3. 浅谈SAP CRM开发——技术概念、与ECC 系列产品区别
  4. [洛谷P1822]魔法指纹
  5. java的两种方式_java 两种方式的区别?
  6. python——作用域 == is
  7. 64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接
  8. php怎么读取mq的数据,php – 无法读取RabbitMQ的所有消息
  9. 机器学习(八)Apriori算法学习
  10. Vue组件学习之事件总线和消息发布订阅
  11. 排序算法 c++(思想+code)
  12. Win7环境下,用VHD安装Win8,实现双系统!
  13. Android Multimedia框架总结(二十八)NuPlayer到OMX过程
  14. postMessage可太有用了
  15. wpf 自动完成comboxBox
  16. 用C语言编写大写字母用ascll表示,用java实现输入ASCII码,打印出对应的大写字母。...
  17. Unity Shader 实现PS图层混合效果
  18. python回归分析结果怎么看_Python数据分析|线性回归
  19. 微信开发解决方案:(一)概述
  20. torch.mul torch.bmm

热门文章

  1. 赢在中国俞敏洪励志演讲
  2. 通讯录(纯C语言实现)
  3. An Introduction to Shiro (formerly JSecurity) – A Beginner’s Tutorial Part 5
  4. MFC和GDI+制作雪花飞舞小程序
  5. SIGAI微信公众号文章
  6. 100种思维模型之马斯洛需求层次理论-81
  7. 网易新游《英雄三国》剖析(二)——属性
  8. MYSQL学习与数据库综合实验(六)——实体完整性实验
  9. java rc4_java实现的RC4加密解密算法示例
  10. rc4加密算法c语言实现,python实现RC4加密算法