RabbitMQ高级篇 笔记

news2025/2/27 2:45:12

这是一些高级的内容。
RabbitMQ还是运行在网络上的,倘若遇到了网络故障,mq自己挂了,出异常了,都会造成最终状态不一致的问题。这就是可靠性问题。
可靠性:一个消息发送出去之后,至少被消费1次。
要解决这3个问题

  • 消息发送的时候丢了
  • mq自己丢了
  • 消费者丢了
    以上都失败了,还得有一个兜底方案。这样尽可能万无一失了。

生产者重连

生产者连不上mq了,此时发送直接失败。因此有了失败重连
失败重连配置
它会影响失败时候的性能,因为mq主打不等,所以生产环境建议禁用。

生产者确认

生产者开启确认机制后,MQ收到消息后,会返回消息给生产者

  1. 投递到MQ,但是路由失败了。(你的routingKey不对,或者交换机没绑定。)一般是开发人员的问题。
  2. 投递到了MQ,并且成功入队,告知投递成功ACK。
  3. 持久化消息,入队成功完成持久化好后,才会ACK。
    其他情况都会返回NACK,告知投递失败。

如何接收ack/nack

有同步和异步两个方法
回调配置

先配置

@Configuration
public class MqConfig implements ApplicationContextAware {


  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    RabbitTemplate rabbitTemplate = applicationContext.getBean(RabbitTemplate.class);
    rabbitTemplate.setReturnsCallback(new ReturnsCallback() {
      @Override
      public void returnedMessage(ReturnedMessage returned) {
        log.debug("收到消息的return  callback");
      }
    });



  }
}
@Test
  
 void testConfirm() throws InterruptedException {
    CorrelationData correlationData = new CorrelationData(UUID.randomUUID().toString());
    correlationData.getFuture()
        .addCallback(new ListenableFutureCallback<CorrelationData.Confirm>() {
          @Override
          public void onFailure(Throwable ex) {
            log.error("消息回调失败", ex);

          }

          @Override
          public void onSuccess(Confirm result) {
            log.debug("收到回执");
            if (result.isAck()) {
              log.debug("成功");
            } else {
              log.debug("失败");
            }
          }
        });
    rabbitTemplate.convertAndSend("hmall.direct11", "blue11", "hello",correlationData);
    Thread.sleep(2000);

  }

情况总结:

  1. 消息成功到达交换机但是没被路由,返回ack但是有renturn消息。
  2. 彻底成功
  3. 持久化消息,入队并且持久化成功,返回ACK
  4. 其他情况都会返回NACK,告知投递失败。

注意nack是由 result.isAck() 为false返回出来的,要关注这个选项。生产者确认有网络开销,建议不开启。要开,publisher-return 开这个就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1126507.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue实现响应式改变scss样式

需求&#xff1a;侧边导航栏点击收起&#xff0c;再次点击展开&#xff0c;但是我这个项目的位置是在左侧菜单栏所以需要自定义 效果图&#xff1a; 实现步骤&#xff1a; 1&#xff1a;定义一个变量&#xff08;因为我这里会存储菜单栏的状态所以需要存储状态&#xff0c;一…

c语言的程序环境和预处理(一眼丁真)

前言&#xff1a; 正所谓&#xff0c;万物c为首。在我们较为深入的学完c语言之后&#xff0c;可以说是打开了编程的第一扇大门。代码我们会敲了&#xff0c;可是这些代码到底是咋运行起来的呢&#xff1f;这些源文件&#xff0c;头文件里的代码又是怎么“整合”在一起的呢&…

前端数据可视化之【series、series饼图配置】配置项

目录 &#x1f31f;Echarts配置项&#x1f31f;series&#x1f31f;饼图 type:pie&#x1f31f;写在最后 &#x1f31f;Echarts配置项 ECharts开源来自百度商业前端数据可视化团队&#xff0c;基于html5 Canvas&#xff0c;是一个纯Javascript图表库&#xff0c;提供直观&…

Python装饰器(包装函数、拦截函数)

无参装饰器 decorate: f decorate(f1) f wrapper 有参装饰器 多层装饰器 装饰器带参数 装饰器带参数&#xff0c;3层 案例 import timeisLogin Falsedef login():username input("请输入用户名&#xff1a;")passward input("请输入密码&#xff1a;&q…

HNSW-分层可导航小世界 算法学习

一、knn的缺陷 1. K-NN方法的工作机制 K-Nearest Neighbors (K-NN) 是一种基于实例的分类方法。它通过逐一比较新样本与已有样本的相似度&#xff0c;挑选出与新样本最接近的k个已有样本&#xff0c;然后根据这些样本的类别&#xff0c;通过投票或加权的方式来决定新样本的类…

如何设计实时聊天系统的架构

1. 系统的要求和目标 1.1 功能要求 对话&#xff1a;系统应支持用户之间的一对一和群组对话。确认消息&#xff1a;系统应支持消息传递确认&#xff0c;如已发送、已送达、已读。共享&#xff1a;系统应支持媒体文件的共享&#xff0c;例如图像、视频和音频。聊天存储&#x…

第3章 指令级并行及其利用

3.1 指令级并行&#xff1a;概念和挑战 1985年之后几乎所有处理器都使用流水线来使指令能重叠执行。由于指令可以并行执行&#xff0c;所有指令之间的这种可能得重叠称为指令级并行ILP。 ILP大体有两种实现方法&#xff1a; 1. 依靠硬件来动态发现并实现并行&#xf…

【解决】设置pip安装依赖包路径默认路径在conda路径下,而不是C盘路径下

【解决】设置pip安装依赖包路径默认路径在conda路径下&#xff0c;而不是C盘路径下 问题描述 在win11下安装miniconda&#xff0c;在conda环境里使用pip安装&#xff0c;依赖包总是安装到C盘路径&#xff0c;如 C:\Users\Jimmy\AppData\Local\Programs\Python\Python311\Lib\…

基于.Net CEF 实现 Vue 等前端技术栈构建 Windows 窗体应用

零、参考资料 1、https://github.com/cefsharp/CefSharp/wiki/Quick-Start-For-MS-.Net-5.0-or-greater 2、https://github.com/cefsharp/CefSharp/wiki/Quick-Start 3、https://github.com/cefsharp/CefSharp/wiki/General-Usage#javascript-integration 一、安装 Nuget 包…

计算机网络文章荟萃

脑残式网络编程入门(二)&#xff1a;我们在读写Socket时&#xff0c;究竟在读写什么&#xff1f;-网络编程/专项技术区 - 即时通讯开发者社区! 1.什么是 socket - 掘金2.socket 的实现原理 - 掘金本文讲述了 socket 在 linux 操作系统下的数据结构&#xff0c;以及阻塞 IO 利用…

RHCE---作业3

一.判断磁盘空间 1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 # 为了方便测式使用每分钟发送一封邮件&#xff0c;若想要每天定时检查则需要将前两个*改为0 0 [roottimeserver ~]…

Unity protobuf中repeated转C#文件List只读问题

Unity protobuf中repeated转C#文件List只读问题 介绍问题解决方案总结 介绍 工具这里我就不多介绍了&#xff0c;如果有用到ProtoGen工具的可以继续看一下我后面的方法。 问题 如下图所示&#xff0c;我这里随便用了一个.proto文件&#xff0c;看下我这里面的repeated标记的…

el-form动态增减数据的问题,编辑时候input输入不了

新增的时候可以展示&#xff0c;但是编辑在点新增就没有效果 原因&#xff1a;改变了数组内的值&#xff0c;但是页面没有重新渲染 <el-form-item label"信息:" required><div style"display: flex; align-items: flex-end"><div><e…

Spring MVC常用十大注解

Spring MVC常用十大注解 一&#xff0c;什么要使用注解 使用注解可以简化配置&#xff0c;提高代码的可读性和可维护性。通过注解可以实现依赖注入&#xff0c;减少手动管理对象的代码量。注解还支持面向切面编程&#xff0c;实现切面、切入点和通知等。此外&#xff0c;注解提…

maven仓库改国内源

今天准备复现漏洞环境&#xff0c;发现太慢&#xff0c;需要配置国内源 file -> settings 搜索maven 修改settings.xml&#xff0c;这里的需要修改两个文件 1.上图的settings.xml文件 2.idea的maven模块 settings.xml文件将原来的注释掉&#xff0c;然后把阿里的添加上&…

【机器学习合集】激活函数合集 ->(个人学习记录笔记)

文章目录 1. S激活函数(sigmoid&Tanh)2. ReLU激活函数3. ReLU激活函数的改进4. 近似ReLU激活函数5. Maxout激活函数6. 自动搜索的激活函数Swish 1. S激活函数(sigmoid&Tanh) Sigmoid函数在机器学习中经常用作激活函数&#xff0c;但它在某些情况下容易出现梯度消失问题…

QWidget快速美化-蓝色边框圆角按钮

将代码复制进QPushButton的样式表 效果: 代码: QPushButton{ color:#52DCFE;border:2px solid #52DCFE;border-radius:5px; }QPushButton::hover{background-color:#52DCFE;color:#ffffff; }QPushButton::pressed,QPushButton::checked{background-color:#52DCFE;color:#ffff…

学习vue3

一、入门 1.引入外部库 ①直接将所有的js都通过script标签引入到html文件中&#xff0c;所有的js资源在web页面中都能通用。 ②使用js引用js&#xff08;ES6&#xff09;&#xff0c;模块导入与导出 2.模块是只读引用 这段话是在解释 Vue.js 中的概念和用法。在 Vue.js 中&a…

​​​​​​​Python---练习:使用while嵌套循环打印 9 x 9乘法表

案例 使用while嵌套循环打印 9 x 9乘法表 思考 之前做过打印出三角形&#xff0c;那个三角形是5行的&#xff0c;这次打印9行的三角形。可以先使用while嵌套循环打印9行的直角三角形 相关链接Python---练习&#xff1a;打印直角三角形&#xff08;利用wihle循环嵌套&#xf…

Ubuntu下载、安装QGIS软件的方法

本文介绍在Linux操作系统Ubuntu版本中&#xff0c;通过命令行的方式&#xff0c;配置QGIS软件的方法。 在Ubuntu等Linux系统中&#xff0c;可以对空间信息加以可视化的遥感、GIS软件很少&#xff0c;比如ArcGIS下属的ArcMap就没有对应的Linux版本&#xff08;虽然有ArcGIS Serv…