文章目录
一、RabbitMq基础
RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue Protocol)的开源实现。
-
Exchange
交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。
Exchange有4种类型: direct(默认), fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别。 -
Queue
消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将取走。 -
Binding
绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。Exchange 和Queue的绑定可以是多对多的关系。
总结: 创建 Exchange 利用路由键,将Exchange 和Queue的绑定,消费端 自己从自己指定的队列拿取数据(消费端需指定队列获取消息)。消息发送端一般需要指定exchange和routingKey。
生产者发送消息到交换机并指定一个路由key,消费者队列绑定到交换机时要制定路由key(key匹配就能接受消息,key不匹配就不能接受消息)
二、Springboot 整合RabbitMq
1. spring boot 安装配置rabbitMq
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
参考URL: https://www.pianshen.com/article/4074353758/
1.1 导入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
1.2 添加配置文件信息
在application.properties文件当中引入RabbitMQ基本的配置信息
#对于rabbitMQ的支持
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
1.3 编写RabbitConfig
启用Rabbit注解
@SpringBootApplication
@EnableRabbit // 开启基于注解的RabbitMQ模式
public class SpringBootAmqpApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootAmqpApplication.class, args);
}
}
1.4 新建一个AmqpController,用于发送消息
@RestController
public class AmqpController {
private final RabbitTemplate rabbitTemplate;
public AmqpController(RabbitTemplate rabbitTemplate) {
this.rabbitTemplate = rabbitTemplate;
}
private final static String SUCCESS = "success";
/**
* 单点
* @param msg
* @return
*/
@GetMapping("/direct")
public String direct(String msg){
rabbitTemplate.convertAndSend("amq.direct", "xudc", msg);
return SUCCESS;
}
@GetMapping("/fanout")
public String fanout(String msg) {
rabbitTemplate.convertAndSend("amq.fanout", "", msg);
return SUCCESS;
}
@GetMapping("/topic")
public String topic(String msg){
rabbitTemplate.convertAndSend("amq.topic", "xudc.#", msg);
return SUCCESS;
}
}
1.5 编写消息监听者
@Component
public class AmqpListener {
@RabbitListener(queues = "xudc")
public void receive1(String message) {
System.err.println("xudc -- receive1接收到消息:" + message);
}
@RabbitListener(queues = "xudc.book")
public void receive2(String message) {
System.err.println("xudc.book -- receive2接收到消息:" + message);
}
@RabbitListener(queues = "andy")
public void receive3(String message) {
System.err.println("andy -- receive3接收到消息:" + message);
}
}
三、参考
SpringBoot集成rabbitmq(一)
参考URL: https://www.cnblogs.com/sword-successful/p/10295561.html
Spring Boot 整合 AMQP
参考URL: https://blog.youkuaiyun.com/kangguang/article/details/104553352
Spring Boot 2.X - Spring Boot整合AMQP之RabbitMQ
参考URL: https://www.pianshen.com/article/4074353758/