发布确认机制是保证消息可靠性的第一步,发布确认保证我们知道消息是否成功到达队列中,返回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. VS2015占内存大吗?_手机是6GB运行内存,何为后台却显示3G内存?
  2. Type of data in energy dashboard
  3. django入门与实践 3-1 环境搭建
  4. Redis,MemCached,MongoDB 概述
  5. java顺序表冒泡排序_冒泡排序就这么简单 - Java3y的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. Android笔记 隐式意图demo
  7. java配置opencv_在Windows中使用OpenCV Java与Eclipse
  8. java linux at_linux下运行java程序报错,求大神解答
  9. 创建窗口,输入一个无符号整数,输出其对应的二进制数
  10. MATLAB 图像处理 灰度图 将图像中某一行或者某一列的灰度值 绘制成一条曲线
  11. 关于前几周项目进行的一些感受
  12. 响应面法 matlab,怎么用MATLAB编写响应面优化的程序?
  13. 数字电路猴博士期末复习笔记
  14. 利用jszip压缩下载多文件
  15. 下载dns linux命令,linux dns 部署命令(示例代码)
  16. sumo 教程——高速公路
  17. 基于深度学习的单视图三维重建算法学习路线
  18. 一个屌丝程序猿的人生(四十三)
  19. 如何防止局域网病毒春风吹又生--之一
  20. C++11版本后的一写新语法及使用方法for、vector、map

热门文章

  1. plus初始化原理及plus is not defined,mui is not defined 汇总
  2. 绷不住了!智能物流中的惊天秘密
  3. 如何将大于2M的图片转化为200K左右(自己的土方法)
  4. cef cookie管理
  5. 1.Java获取本机IP地址,主机名,域名
  6. 配置过滤器报错 JSPs only permit GET POST or HEAD
  7. VHDL硬件描述语言学习笔记(一)
  8. 索尼PS4程序升级,令PS VR带来私人3D影院体验
  9. mysql 与运算_MySQL常用运算符详解
  10. 【Linux虚拟机】下安装docker