RabbitMQ
主要有六种工作模式,本文整合 SpringBoot
分别介绍工作模式的实现。
前提概念
生产者
消息生产者或者发送者,使用 P
表示:
队列
消息从生产端发送到消费端,一定要通过队列转发,使用 queue_name
表示:
消费者
消费的消费者或者接收者,使用 C
表示,如果有多个消费者也可以用 C1
、 C2
表示:
SpringBoot整合RabbitMQ基本配置
- 添加maven依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> <version>2.2.1.RELEASE</version> </dependency>
- 添加application.yml 配置
spring: rabbitmq: host: 192.168.3.19 port: 5672 username: admin password: 123456
- 消息生产
生产端发送消息,调用 RabbitTemplate
发送消息,比如:
@Autowired private RabbitTemplate rabbitTemplate; public String send() { rabbitTemplate.convertAndSend("routingKey","send message"); }
- 消费消息
消费消息使用队列监听注解 @RabbitListener
,添加队列名称就能消费发送到队列上的消息了:
@RabbitListener(queuesToDeclare = @Queue("queue_name")) public void consume(String message) { // 接收消息 }
1. 简单(simple)模式
最简单的消息发送
特点
点对点模式 Exchange
代码示例
生产消息:
@GetMapping("/simple-send") public String simpleSend() { rabbitTemplate.convertAndSend("simple","this is news"); return "ok"; }
消费消息
@RabbitListener(queuesToDeclare = @Queue("simple")) public void consume(String message) { System.out.println(message); }
输出:
this is news
无需创建交换机和绑定队列,只需要匹配发送端和消费端的队列名称就能成功发送消息。
2. 工作模式
在多个消费者之间分配任务
特点
工作模式
和简单模式
差不多,只需要生产端、消费端、队列。- 不同在于一个生产者、一个队列对应
多个消费者
,也就是一对多的关系。 - 在多个消费者之间分配消息( 竞争消费者模式 ),类似轮询发送消息,每个消息都只发给一个消费者。
代码示例
- 生产消息:
@GetMapping("/work-send") public String simpleSend() { rabbitTemplate.convertAndSend("work","this is news"); return "ok"; }
- 消费消息:
@RabbitListener(queue