《JavaEE开发的颠覆者: Spring Boot实战》系列读书笔记
SpringBoot 整合RabbitMQ
什么是RabbitMQ?
- RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,服务器端用Erlang语言编写,支持多种客户端,RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层,保存这个数据。
RabbitMQ的优点
-
消息总线(Message Queue),是一种跨进程的通信机制,用于上下游传递消息。
消息中间件最主要的作用是解耦,中间件最标准的用法是生产者生产消息传送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁在生产消息,从而达到解耦的目的。
RabbitMQ 在生产者与队列之间, 加入了交换机 (Exchange). 这样发消息者和队列就没有直接联系,
转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列。交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息。
交换机有四种类型:Direct, topic, Headers and Fanout
- Direct:direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key,消息的routing_key 匹配时, 才会被交换器投送到绑定的队列中去.
- Topic:按规则转发消息(最灵活)
- Headers:设置 header attribute 参数类型的交换机
- Fanout:转发消息到所有绑定队列
环境配置(Wndows环境)
安装Erlang
Erlang下载地址
安装RabbbitMQ
RabbbitMQ下载地址
下载安装完成之后,在命令行打开RabbitMQ文件sbin目录,然后输入命令:
rabbitmq-plugins enable rabbitmq_management,启动管理工具。
访问:http://127.0.0.1:15672/
使用默认账号登录:guest/ guest
简单使用
添加依赖
-
主要是添加
spring-boot-starter-amqp
的支持<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
配置文件
-
在application.propertions中配置 RabbitMQ 的地址、端口、虚拟主机等信息
spring.rabbitmq.host=127.0.0.1 spring.rabbitmq.port=5672 spring.rabbitmq.virtualhost=testhost spring.rabbitmq.username=admin spring.rabbitmq.password=XX
队列配置
@Configuration
public class RabbitConfig {
@Bean
public Queue Queue() {
return new Queue("joker");
}
}
生产者
-
rabbitTemplate 是 Spring Boot 提供的默认实现,根据key全文匹配去寻找队列。
@Component public class HelloSender { @Autowired private AmqpTemplate rabbitTemplate; public void send() { String context = "hello rabbit"; System.out.println("发送消息 : " + context); this.rabbitTemplate.convertAndSend("joker", context); } }
消费者
@Component
@RabbitListener(queues = "joker")
public class HelloReceiver {
@RabbitHandler
public void receive(String hello) {
System.out.println("接收消息 : " + hello);
}
}
测试
@Test
public void hello() throws Exception {
helloSender.send();
}