开发者学堂课程【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 模块。
二、配置相关信息
查看其 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);