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

RabbitMQ模块新增消息转换器

文章目录

    • 1.目录结构
    • 2.代码
        • 1.pom.xml 排除logging
        • 2.RabbitMQConfig.java
        • 3.RabbitMQAutoConfiguration.java

1.目录结构

CleanShot 2025-01-02 at 18.29.12@2x

2.代码

1.pom.xml 排除logging
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.sunxiansheng</groupId><artifactId>sunrays-common</artifactId><version>1.0.5</version></parent><version>1.0.5</version><artifactId>common-rabbitmq-starter</artifactId><dependencies><!-- 工具包 --><dependency><groupId>com.sunxiansheng</groupId><artifactId>common-tool-starter</artifactId><version>1.0.5</version></dependency><!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency></dependencies></project>
2.RabbitMQConfig.java
package com.sunxiansheng.rabbitmq.config;import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.amqp.support.converter.SimpleMessageConverter;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** Description: RabbitMQ配置类** @Author sun* @Create 2025/1/2 14:22* @Version 1.0*/
@Configuration
@AutoConfigureBefore(RabbitAutoConfiguration.class) // 在RabbitAutoConfiguration之前加载,用于覆盖默认的RabbitMQ配置
public class RabbitMQConfig {/*** 自定义消息转换器,处理JSON和文本消息** @return*/@Beanpublic MessageConverter customMessageConverter() {return new MessageConverter() {private final Jackson2JsonMessageConverter jacksonConverter = new Jackson2JsonMessageConverter();private final SimpleMessageConverter simpleMessageConverter = new SimpleMessageConverter();/*** 发送消息的时候触发* @param object* @param messageProperties* @return* @throws RuntimeException*/@Overridepublic Message toMessage(Object object, MessageProperties messageProperties) throws RuntimeException {if (object instanceof String) {// 如果是字符串,设置为文本类型发送messageProperties.setContentType("text/plain");return simpleMessageConverter.toMessage(object, messageProperties);} else {// 默认当作JSON类型处理messageProperties.setContentType("application/json");return jacksonConverter.toMessage(object, messageProperties);}}/*** 接收消息的时候触发* @param message* @return* @throws RuntimeException*/@Overridepublic Object fromMessage(Message message) throws RuntimeException {String contentType = message.getMessageProperties().getContentType();// 如果是json类型的数据,就将其自动反序列化为Java对象if ("application/json".equals(contentType)) {return jacksonConverter.fromMessage(message);// 如果是文本类型的数据,就将其转换为字符串} else if ("text/plain".equals(contentType)) {return simpleMessageConverter.fromMessage(message);} else {throw new RuntimeException("自定义的消息转换器不支持该类型: " + contentType);}}};}/*** 设置RabbitTemplate的消息转换器为自定义消息转换器** @param connectionFactory* @return*/@Beanpublic RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);// 使用自定义消息转换器rabbitTemplate.setMessageConverter(customMessageConverter());return rabbitTemplate;}
}
3.RabbitMQAutoConfiguration.java
package com.sunxiansheng.rabbitmq.config;import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;/*** Description: RabbitMQ自动配置类** @Author sun* @Create 2024/12/31 18:44* @Version 1.0*/
@Configuration
@Import(RabbitMQConfig.class)
public class RabbitMQAutoConfiguration {
}

相关文章:

RabbitMQ模块新增消息转换器

文章目录 1.目录结构2.代码1.pom.xml 排除logging2.RabbitMQConfig.java3.RabbitMQAutoConfiguration.java 1.目录结构 2.代码 1.pom.xml 排除logging <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…...

验证二叉搜索树(力扣98)

根据二叉搜索树的特性&#xff0c;我们使用中序遍历&#xff0c;保证节点按从小到大的顺序遍历。既然要验证&#xff0c;就是看在中序遍历的条件下&#xff0c;各个节点的大小关系是否符合二叉搜索树的特性。双指针法和适合解决这个问题&#xff0c;一个指针指向当前节点&#…...

vue3 vue2区别

Vue 3 和 Vue 2 之间存在多个方面的区别&#xff0c;以下是一些主要的差异点&#xff1a; 1. 性能改进 Vue 3&#xff1a;在性能上有显著提升&#xff0c;包括更小的包体积、更快的渲染速度和更好的内存管理。Vue 2&#xff1a;性能相对较低&#xff0c;尤其是在大型应用中。…...

IOS 自定义代理协议Delegate

QuestionViewCell.h文件代码&#xff0c;定义代理协议 protocol QuestionViewCellDelegate <NSObject>- (void)cellIsOpenDidChangeAtIndexPath:(NSIndexPath *)indexPath;endinterface QuestionViewCell : UITableViewCellproperty (nonatomic, weak) id<QuestionVi…...

消息队列篇--扩展篇--码表及编码解码(理解字符字节和二进制,了解ASCII和Unicode,了解UTF-8和UTF-16,了解字符和二进制等具体转化过程等)

1、理解字符&#xff0c;int&#xff0c;字节以及二进制存储 &#xff08;1&#xff09;、字符 字符是文本的基本单位&#xff0c;例如字母&#xff08;A, B, C&#xff09;、数字&#xff08;1, 2, 3&#xff09;、标点符号&#xff08;!, ?, ,&#xff09;以及其他符号&am…...

2024年度总结——理想的风,吹进现实

2024年悄然过去&#xff0c;留下了太多美好的回忆&#xff0c;不得不感慨一声时间过得真快啊&#xff01;旧年风雪尽&#xff0c;新岁星河明。写下这篇博客&#xff0c;记录我独一无二的2024年。这一年&#xff0c;理想的风终于吹进现实&#xff01; 如果用一句话总结这一年&am…...

代码工艺:实践 Spring Boot TDD 测试驱动开发

TDD 的核心理念是 “先写测试&#xff0c;再写功能”&#xff0c;其过程遵循一个严格的循环&#xff0c;即 Red-Green-Refactor&#xff1a; TDD 的流程 1. Red&#xff08;编写失败的测试&#xff09; 根据需求&#xff0c;先编写一个测试用例&#xff0c;描述期望的行为。…...

深度学习|表示学习|卷积神经网络|通道 channel 是什么?|05

如是我闻&#xff1a; 在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;channel&#xff08;通道&#xff09; 是指输入或输出数据的深度维度&#xff0c;通常用来表示输入或输出的特征类型。 通道的含义 输入通道&#xff08;Input Channels&#xff09;&#xff1a;…...

PCDN的虚拟机与云主机区别

使用虚拟机和云主机运行PCDN&#xff08;P2P CDN&#xff09;时&#xff0c;主要存在以下区别&#xff1a; 一、资源分配与灵活性 虚拟机&#xff1a; 资源受限&#xff1a;虚拟机运行在物理服务器上&#xff0c;其资源&#xff08;如CPU、内存、带宽&#xff09;受到物理服务…...

计算机网络 (57)改进“尽最大努力交付”的服务

前言 计算机网络中的“尽最大努力交付”服务是网络层的一种数据传输方式。这种服务的特点是网络层只负责尽力将数据报从源端传输到目的端&#xff0c;而不保证数据传输的可靠性。 一、标记与分类 为数据分组打上标记&#xff1a; 给不同性质的分组打上不同的标记&#x…...

Redis 详解

简介 Redis 的全称是 Remote Dictionary Server&#xff0c;它是一个基于内存的 NoSQL&#xff08;非关系型&#xff09;数据库&#xff0c;数据以 键值对 存储&#xff0c;支持各种复杂的数据结构 为什么会出现 Redis&#xff1f; Redis 的出现是为了弥补传统数据库在高性能…...

如何解压rar格式文件?8种方法(Win/Mac/手机/网页端)

RAR 文件是一种常见的压缩文件格式&#xff0c;由尤金・罗谢尔&#xff08;Eugene Roshal&#xff09;开发&#xff0c;因其扩展名 “rar” 而得名。它通过特定算法将一个或多个文件、文件夹进行压缩&#xff0c;大幅减小存储空间&#xff0c;方便数据传输与备份。然而&#xf…...

网络仿真工具Core环境搭建

目录 安装依赖包 源码下载 Core安装 FAQ 下载源码TLS出错误 问题 解决方案 找不到dbus-launch 问题 解决方案 安装依赖包 调用以下命令安装依赖包 apt-get install -y ca-certificates git sudo wget tzdata libpcap-dev libpcre3-dev \ libprotobuf-dev libxml2-de…...

Coze插件开发之基于已有服务创建并上架到扣子商店

Coze插件开发之基于已有服务创建并上架到扣子商店 在应用开发中&#xff0c;需要调用各种插件&#xff0c;以快速进行开发。但有时需要调用的插件在扣子商店里没有&#xff0c;那怎么办呢&#xff1f; 今天就来带大家快速基于已有服务创建一个新的插件 简单来讲&#xff0c;就是…...

ORACLE-主备备-Failover

背景 随着业务的不断增涨,至使现有的单节点DG环境的连接已经无法满足当前业务需求,并且随着业务的重要性,同时也要求数据库的高可用性,减少数据库故障对业务的影响。于是规划迁移方案。 迁移方案如下: 因PRIMARY库本地磁盘空间已达到80%决定弃用,搭建高可用2个节点的RAC做…...

wampserver + phpstrom 调试配置

step 1 点击任务栏wampserver图标->php->php.ini[apache module] 在文件最后面,确保这些值被定义且跟以下的一样 xdebug.mode debug xdebug.start_with_request yes xdebug.client_port 9003 xdebug.client_host 127.0.0.1step 2 按如下配置 step3 下断点,运行即…...

Java Web-Cookie与Session

会话跟踪技术 会话跟踪技术是一种在 Web 应用程序中跟踪用户会话状态的机制&#xff0c;它允许服务器在多个请求之间识别和关联属于同一用户的请求&#xff0c;以便在整个会话过程中保持用户相关的信息。以下是几种常见的会话跟踪技术&#xff1a; Cookie 概念&#xff1a;Cook…...

Couchbase UI: Dashboard

以下是 Couchbase UI Dashboard 页面详细介绍&#xff0c;包括页面布局和功能说明&#xff0c;帮助你更好地理解和使用。 1. 首页&#xff08;Overview&#xff09; 功能&#xff1a;提供集群的整体健康状态和性能摘要 集群状态 节点健康状况&#xff1a;绿色&#xff08;正…...

每日 Java 面试题分享【第 13 天】

欢迎来到每日 Java 面试题分享栏目&#xff01; 订阅专栏&#xff0c;不错过每一天的练习 今日分享 3 道面试题目&#xff01; 评论区复述一遍印象更深刻噢~ 目录 问题一&#xff1a;如何在 Java 中调用外部可执行程序或系统命令&#xff1f;问题二&#xff1a;如果一个线程…...

探究 Facebook 隐私安全发展方向,未来走向何方?

随着社交媒体的普及&#xff0c;隐私和数据安全问题成为了全球关注的焦点。Facebook&#xff0c;作为全球最大的社交平台之一&#xff0c;其隐私安全问题尤其引人注目。近年来&#xff0c;随着用户数据泄露事件的不断发生&#xff0c;Facebook 不断调整其隐私政策&#xff0c;探…...

第三十一周学习周报

目录 摘要Abstract文献阅读总体架构实验分析 知识复习总结 摘要 在本周阅读的文献中&#xff0c;作者提出了一种基于生成对抗网络&#xff08;GAN&#xff09;和长短期记忆网络&#xff08;LSTM&#xff09;融合模型的连续管钻井参数预测方法&#xff0c;旨在提高连续管钻井的…...

白嫖一个可以公网访问、带评论和图床的博客系统

这里我来把搭建这个网站的过程记录下&#xff0c;可供新手朋友搭建 完成github page的创建 首先先打开github官网&#xff0c;然后打开your repositories这个标签 然后新建一个repositories&#xff0c;名字是比较特殊的&#xff0c;为<username>.github.io这个格式&am…...

定时器、计数器

定时器&#xff1a;TON TOF TONR&#xff1a;保持型接通定时器 TP:脉冲定时器&#xff1a;触发一次&#xff0c;就开始计时 TP&#xff1a;按下I0.1 TP开始计时&#xff0c;Q电开始有电&#xff0c;时间到Q点失电 计数器&#xff1a;CTU加 CTD减 CTUD加减 两个方法&#xf…...

Ubuntu Server连接wifi

背景 家里服务器放在客厅太吵了, 准备挪到阳台, 所以买了TP wifi接收器, 因此需要配置wifi连接. 刚开始买了Tenda Ax300, 结果不支持服务器系统, 买前还是得和客服交流交流. 准备 驱动安装 对于windows系统来说, 这款接收器是免驱的, 但在linux上需要安装相应型号驱动 安装…...

关于MySQL InnoDB存储引擎的一些认识

文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的&#xff1f;1.1 MySQL的存储引擎有哪些&#xff1f;1.2 MyIsam和InnoDB有什么区别&#xff1f; 2.MySQL表的结构是什么&#xff1f;2.1 行结构是什么样呢&#xff1f;2.1.1 NULL列表&#xff1f;2.1.2 char和varc…...

深入剖析SpringBoot启动机制:run()方法详尽解读

摘要 本文深入解析SpringBoot的启动机制&#xff0c;以run()方法为核心&#xff0c;逐步追踪并详细解释其关键步骤。首先探讨run()方法的工作原理&#xff0c;然后深入代码层面分析各个关键环节。文章提供刷新后钩子和启动后任务的代码示例&#xff0c;帮助读者理解SpringBoot源…...

Nginx中部署多个前端项目

1&#xff0c;准备前端项目 tlias系统的前端资源 外卖项目的前端资源 2&#xff0c;nginx里面的html文件夹中新建&#xff0c;tlias和sky两个文件夹。 切记这是在nginx/html下创建的 mkdir sky mkdir tlias 把tlias和sky的资源都放到对应的文件夹中 3&#xff0c;编辑配置ngi…...

1688寻源通:赋能跨境贸易的高效业务平台

前言 在全球化的浪潮下&#xff0c;跨境电商已成为推动经济发展的重要力量。作为国内领先的B2B电商平台&#xff0c;1688凭借其强大的供应链资源和创新技术&#xff0c;推出了“寻源通”业务&#xff0c;旨在帮助国内供应商和跨境采购商实现更高效、更精准的供需匹配&#xff…...

JVM深入学习(一)

目录 一.JVM概述 1.1 为什么要学jvm&#xff1f; 1.2 jvm的作用 1.3 jvm内部构造 二.JVM类加载 2.1类加载过程 2.2类加载器 2.3类加载器的分类 2.4双亲委派机制 三.运行时数据区 堆空间区域划分&#xff08;堆&#xff09; 为什么分区(代)&#xff1f;&#xff08…...

Qt Creator 15.0.0如何更换主题和字体

1.打开Qt Creator 15.0.0 (Community)&#xff0c; 2.点击编辑栏3.点击Preferences... 4.修改主题&#xff0c;点击环境&#xff0c;修改Theme:栏 5.修改字体大小&#xff0c;点击文本编辑器&#xff0c;修改字号栏。&#xff0c;修改Theme:栏...