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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
8月前
java202303java学习笔记第三十七天序列化流1
java202303java学习笔记第三十七天序列化流1
22 0
|
存储 缓存 分布式计算
Structured_介绍_序列化更迭 | 学习笔记
快速学习 Structured_介绍_序列化更迭
58 0
Structured_介绍_序列化更迭 | 学习笔记
|
消息中间件 JSON 缓存
RedisTemplate&amp 序列化机制|学习笔记
快速学习 RedisTemplate&amp 序列化机制
119 0
|
机器学习/深度学习 JSON 网络协议
结构体 map 切片序列化|学习笔记
快速学习结构体 map 切片序列化
117 0
|
JSON 网络协议 JavaScript
序列化 struct 时 tag 的使用 | 学习笔记
快速学习序列化 struct 时 tag 的使用
78 0
序列化 struct 时 tag 的使用 | 学习笔记
|
XML JSON 前端开发
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
447 0
【Django学习笔记 - 17】:序列化和反序列化(restful接口小案例、DRF的工程搭建、序列化器与序列化、验证、保存)
|
存储 JSON 编解码
06、Netty学习笔记—(聊天业务优化:扩展序列化算法)
06、Netty学习笔记—(聊天业务优化:扩展序列化算法)
06、Netty学习笔记—(聊天业务优化:扩展序列化算法)
|
分布式计算 Hadoop 开发者
序列化案例 Debug 调试| 学习笔记
快速学习序列化案例 Debug 调试
278 0
|
存储 分布式计算 自然语言处理
序列化概述| 学习笔记
快速学习序列化概述
|
1月前
|
存储 C#
C#中的序列化和反序列化
C#中的序列化和反序列化
12 0

热门文章

最新文章