RabbitTemplate 发送接受消息& amp 序列化机制|学习笔记

简介: 快速学习 RabbitTemplate 发送接受消息& amp 序列化机制

开发者学堂课程【SpringBoot 快速掌握 - 高级应用:RabbitTemplate 发送接受消息& amp 序列化机制】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/613/detail/9302


RabbitTemplate 发送接受消息& amp 序列化机制


内容介绍:

一、创建项目

二、配置相关信息

三、发送单播消息

四、发送广播消息

五、接收消息


一、创建项目

使用 Spring Initializer(Spring 初始化向导),创建包名为 com.atguigu,工程名为springboot-02-amqp 的项目,表示用来测试 amqp。

下一步为工程设定参数,选择1.5.12版本,在 Integration (整合)模块里勾选上 RabbitMQ,因此此时我们所需为 RabbitMQ,其他时刻也可以选择Kafka、JMK (ActiveMQ)JMS、JMS(Artemis) 等等。

为了测试方便,也可以引入 web 模块,点击 next,然后点击 finish,完成工程的创建。打开观察它的 pom 文件,引入了 spring-boot-starter-amqp 模块。

image.png


二、配置相关信息

查看其 pom 文件,引入了 spring-boot-starter-amqp 模块,点击进入后发现它引入了 spring-message、spring-rabbit 操作模块。

spring boot 在一定场景下可完成自动配置。

RabbitMQ 相关类中的 RabbitAutoConfiguration 是 rabbitMQ 的自动配置类,自动配置了连接工厂ConnectionFactory 。

从这里可以获取 rabbitMQ 的连接,而连接信息比如主机地址、用户名、密码以及vhost等均是在 config 中得到的。

config 是 rabbitProperties 和 spring.rabbitmq 的配置绑定, RabbitProperties  封装了 RabbitMQ 的所有配置。

找到配置文件,输入 spring rabbitmq  的相关配置,

包括:

rabbitmq 的主机地址118.24.44.169(若不写默认为 localhost)、rabbitmq 的用户名 guest、rabbitmq 的密码 guest 以及 rabbitmq 的端口,默认不写即5672,vhost 的属性可以指定也可以不指定。


三、发送单播消息

自动配置除了给我们连接了工厂,还会在容器中加一个 RabbitTemplate 和AmqpAdmin:RabbitMQ (系统管理功能组件)。RabbitTemplate 用来给 rabbitMQ 发送和接收消息,AmqpAdmin:RabbitMQ 可以创建队列和交换器等。

在测试类里 RabbitTemplate 自动注入,尝试给消息队列里边发送一些内容。

发送单播消息的过程:

将一个消息发布到一个队列,可以使用两个方法,第一种是用 send(String exchange String routingKey, Message message),好处是可以自己构造一个 message,可以定制消息体内容和消息头;

第二种是一种更为常见的方式 convertAndSend(String exchange,String routingKey,0bject object),object 默认当成消息体,只需要传入要发送的对象,自动序列化发送给 rabbitmq。

对象被默认序列化以后发送出去

核心代码:

@Test

public void contextLoads() {

//Message 需要自己构造一个;定义消息体内容和消息头//rabbitTemplate.send(exchage , routeKey,message);

//object 默认当成消息体,只需要传入要发送的对象,自动序列化发送给 rabbitmq;

//rabbitTemplate.convertAndSend(exchage, routeKey,object);

Map map = new HashMap<>();

map.put( "msg","这是第一个消息");

map.put( "data",Arrays.aslist("he1loworld" ,123,true));

/对象被默认序列化以后发送出去

rabbitTemplate.convertAndSend( exchange: "exchange.direct", routingKey: "atguigu.news " , new Book)

将数据转换成 json 形式发送

消息转换器默认使用的是 Simple MessageConvert,序列化数据的时候是按照JDK的序列化规则进行的,我们可以换为自己的配置,

命名为 config.MyAMQPConfig,添加注解 @Configuration,放入MessageConvert,添加 return new Jackson2JsonMessageconverter()

}

核心代码:

@Test

public void receive(){

0bject o = rabbitTemplate.receiveAndConvert( queueName: "atguigu.news");

System.out.println(o.getClass());

System.out.println(o);

}


四、发送广播消息

发送广播消息的过程

不管是单播还是广播,只需要发送给对应的交换器就可以。

发送广播消息的核心代码:

public void sendMsg(){

rabbitTemplate.convertAndSend(exchange:"exchange .fanout" routingKey:"", new Book( bookName; "三国演义",author: "罗贯中"))


五、接收消息

接收消息的过程:

输入以下代码,将消息传递后浏览器中的对应位置会接收消息。当消息传出后,刷新浏览器,会发现,消息已传入对应位置。

接收消息的核心代码:

@Test

publie void receive(){

0bject o = rabbitTemplate.receiveAndConvert( queueName:"atguigu .news");

System.out.println(o-getClass(;

System.out.println(o);

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
6月前
|
存储 Java 数据库
|
Java Maven
JAVA反序列化学习笔记4.Commons Collections2分析
JAVA反序列化学习笔记4.Commons Collections2分析
|
1天前
|
存储 缓存 安全
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
9 3
|
6月前
|
存储 JSON 缓存
Java 序列化机制详解
Java 序列化机制是一种将对象转换为字节流的过程,以便在网络上传输或保存到文件中,并能在需要时将字节流还原为对象。这一机制通过实现 `java.io.Serializable` 接口来实现,同时涉及到一些关键概念和注意事项。
106 0
Java 序列化机制详解
|
存储 NoSQL Java
【Spring技术原理】分析探究RedisTemplate的序列化和反序列化+泛型机制
【Spring技术原理】分析探究RedisTemplate的序列化和反序列化+泛型机制
1056 0
|
安全 Java
JAVA反序列化学习笔记3.Commons Collections5分析
JAVA反序列化学习笔记3.Commons Collections5分析
|
安全 Java
JAVA反序列化学习笔记2.Commons Collections1分析
JAVA反序列化学习笔记2.Commons Collections1分析
|
Java
Java IO流--对象流ObjectInputStream和ObjectOutputStream及对象序列化机制的理解
Java IO流--对象流ObjectInputStream和ObjectOutputStream及对象序列化机制的理解
69 0
java202303java学习笔记第三十七天序列化流1
java202303java学习笔记第三十七天序列化流1
32 0
Java开发——31.I/O流_处理流(对象流),对象的序列化机制
对象的序列化机制:允许把内存中的Java对象转换成和平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点(序列化);其它程序获取了这种二进制流,就可以恢复成原来的Java对象(反序列化)。
Java开发——31.I/O流_处理流(对象流),对象的序列化机制