iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Springboot 2.x RabbitTemplate默认消息持久化的示例分析
  • 452
分享到

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

2023-06-29 08:06:37 452人浏览 薄情痞子
摘要

这篇文章主要为大家展示了“SpringBoot 2.x RabbitTemplate默认消息持久化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springboot

这篇文章主要为大家展示了“SpringBoot 2.x RabbitTemplate默认消息持久化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“springboot 2.x RabbitTemplate默认消息持久化的示例分析”这篇文章吧。

前言

之前在Java直接测试MQ消息持久化时,采取如下的配置实现消息的持久化:

//消息持久化测试Builder builder = new Builder();builder.deliveryMode(2);BasicProperties properties = builder.build();channel.basicPublish("", queue_name, properties, string.getBytes());

其中针对BasicProperties中的源码信息为:

public static class BasicProperties extendscom.RabbitMQ.client.impl.AMQBasicProperties {        private String contentType;//消息类型如:text/plain        private String contentEncoding;//编码        private Map<String,Object> headers;        private Integer deliveryMode;//1:nonpersistent 不持久 2:persistent 持久        private Integer priority;//优先级        private String correlationId;        private String replyTo;//反馈队列        private String expiration;//expiration到期时间        private String messageId;        private Date timestamp;        private String type;        private String userId;        private String appId;        private String clusterId;...

参照博客:消息应答(autoAck)、队列持久化(durable)以及消息持久化

springboot测试

上面的配置是Java直接测试时,所需要编写的代码逻辑,如果采取springboot配置,则会出现默认消息持久化的现象。

至于测试案例,可以参考下列博客:

SpringBoot整合RabbitMQ实现消息确认机制

测试现象

首先将消息消费者代码进行注释。执行接口,创建消息存入队列中。

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

源码分析

要想知道为什么消息会自动持久化,则需要关注rabbitTemplate.convertAndSend(exchange,routingKey,msg)这个方法。

从源码执行逻辑可以看出:

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

rabbitTemplate提供的消息加载至队列中,采取的数据类型为Object,但在其源码逻辑中,又将Object消息类型,进行了this.convertMessageIfNecessary(object)处理,将object对象类型转化为Message对象类型。

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

从此处可以看出,rabbitTemplate为了让开发者处理数据更简单,将消息持久化等操作默认进行了配置

现在,一起来看convertMessageIfNecessary(object)做了什么?

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

判断当前的数据类型,是否是Message类型

如果是Message类型,则直接将其强转Message
如果不是,则执行了新的方法,将其转换了一次。

转换过程如下所示:

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

后面的就不深入了。那持久化的默认配置在哪进行的?

回到最初的convertAndSend执行方法。

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

该参数由类创建加载时生成,其数据如下所示:

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

Springboot 2.x RabbitTemplate默认消息持久化的示例分析

联想

也就是说,在convertMessageIfNecessary时,会判断传递的参数类型是否为Message类型,如果不是则需要再包装一次。

如果不想设定消息持久化,传递的数据类型为Message类型即可!

以上是“Springboot 2.x RabbitTemplate默认消息持久化的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: Springboot 2.x RabbitTemplate默认消息持久化的示例分析

本文链接: https://www.lsjlt.com/news/323710.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作