当前位置: 首页 > news >正文

RabbitMQ发送者重连、发送者确认

RabbitMQ发送者重连、发送者确认

一、发送者重连

spring:rabbitmq:connection-timeout: 1s #设置MQ的连接超时时间template:retry:enabled: true #开启超时重试机制initial-interval: 1000ms #失败后的初始等待时间multiplier: 1 #失败后下次的等待时长倍数,下次等待时长=initial-interva * multipliermax-attempts: 3 #最大重试次数

当网络不稳定的时候,利用重试机制可以有效提高消息发送成功的的成功率,不过SpringAMQP提供的重试机制是阻塞式的重试,也就是说多次重试等待的过程中,当前线程是被阻塞的,会影响业务性能。
如果对于业务性能有要求,建议禁用重试机制。如果一定要用,请合理配置等待时长和重试次数,当然也可考虑使用异步线程来执行发送消息的代码。

二、发送者确认
SpringAMQP提供了Publisher ConfirmPublisher Return两种确认机制。开启确认机制以后,当发送者发送消息给MQ后,MQ会返回确认结果给发送者。返回的结果有以下几种情况:

  • 消息投递到MQ,但是路由失败。此时会通过PublisherReturn返回路由异常原因,然后返回ACK,告知投递成功。
  • 临时消息投递到了MQ,并且入队成功,返回ACK,告知投递成功
  • 持久消息投递到了MQ,并且入队完成持久化,返回ACK,告知投递成功
  • 其他情况都会返回NACK,告知投递失败。
    在这里插入图片描述

1.在publicher这个微服务的application.yml中添加配置

spring:rabbitmq:publisher-confirm-type: correlated #开启publisher confirm机制,并设置confirm类型publisher-returns: true #开启publisher return机制

配置说明这里publisher-confirm-type有三种模式可选

  • none:关闭confirm机制
  • simple:同步阻塞等待MQ的回执消息
  • correlated:MQ异步回调方式返回回执消息

2.ReturnCallback:每个RabbitTemplate只能配置一个ReturnCallback,因此需要在项目启动过程中配置:

@Slf4j
@Configuration
@RequiredArgsConstructor
public class MqConfig {private final RabbitTemplate rabbitTemplate;@PostConstructpublic void init() {rabbitTemplate.setReturnsCallback(returnedMessage -> {log.error("监听到消息return callback");log.debug("exchange: {}", returnedMessage.getExchange());log.debug("routingKey: {}", returnedMessage.getRoutingKey());log.debug("message: {}", returnedMessage.getMessage());log.debug("replyCode: {}", returnedMessage.getReplyCode());log.debug("replyText: {}", returnedMessage.getReplyText());});}
==============================上面简化的是这部分内容=========================================================rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() {@Overridepublic void returnedMessage(ReturnedMessage returnedMessage) {//TODO}});

3.ConfirmCallback:发送消息,指定消息ID,消息ConfirmCallback

@Testpublic void testConfirmCallback() throws InterruptedException {//创建correlationDataCorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());correlationData.getFuture().addCallback(new ListenableFutureCallback<CorrelationData.Confirm>() {@Overridepublic void onFailure(Throwable ex) {log.error("spring amqp 处理确认结果异常", ex);}@Overridepublic void onSuccess(CorrelationData.Confirm result) {if (result.isAck()) {log.debug("收到ConfirmCallback ack,消息发送成功!!!");} else {log.error("收到ConfirmCallback nack,消息发送失败!reason:{}", result.getReason());}}});//交换机名称String exChangeNange = "hmall.topic";//消息String message = "TopicTopic!!!Topic!!! ";//发送消息rabbitTemplate.convertAndSend(exChangeNange, "hina.new", message, correlationData);Thread.sleep(3000);}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 用于自动驾驶的基于立体视觉的语义 3D 对象和自我运动跟踪
  • 区间预测 | 光伏出力的区间预测(Matlab)
  • android前台服务
  • Python * attr方法
  • MVC 参考手册
  • 深入解析JVM垃圾回收机制:Full GC、Minor GC与Major GC
  • 【海外高校联合支持举办 | 学术大咖fellow汇聚】2024年人工智能与数字化管理国际会议(ICAIDM 2024,9月20-22)
  • Java中的单点登录实现:OAuth2与JWT
  • (~_~)
  • 若依关闭验证码功能
  • Error running appInvalid argument : Argument invalidIport)
  • 前后端完全分离实现登录和退出
  • CTFHUB-文件上传-无验证
  • EAK水冷电阻60kW负载制动电阻器
  • PHP健身微信小程序系统源码
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Angular6错误 Service: No provider for Renderer2
  • C学习-枚举(九)
  • Druid 在有赞的实践
  • exif信息对照
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Redux 中间件分析
  • scala基础语法(二)
  • SpingCloudBus整合RabbitMQ
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • vue-cli3搭建项目
  • 代理模式
  • 分类模型——Logistics Regression
  • 官方解决所有 npm 全局安装权限问题
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • #AngularJS#$sce.trustAsResourceUrl
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (八)c52学习之旅-中断实验
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (待修改)PyG安装步骤
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (蓝桥杯每日一题)love
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (区间dp) (经典例题) 石子合并
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .apk文件,IIS不支持下载解决
  • .net和php怎么连接,php和apache之间如何连接
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .sh 的运行
  • @GetMapping和@RequestMapping的区别
  • @Query中countQuery的介绍
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [2019红帽杯]Snake