一、基本概念及安装
1、基本概念
1.1、Producer生产者
负责生产消息,与Borker消息代理建立连接进行推送消息
1.2、message消息
要发送的消息,并携带上router-key路由键和VHost
1.3、Broker消息代理
接收生产者的消息,根据message中的VHost将消息发给指定虚拟主机
1.4、VHost虚拟主机
类似于一台服务器,可定制dev和prod进行切换。由Vhost指定exchange交换机
1.5、Exchange交换机
将消息根据router-key发送到对应queue队列中,且可以有多台交换机
DirectExchange:满足router-key进行转发(精确匹配)
FanoutExchange:给所有的队列进行转发(无视路由键)
TopicExchange:模糊匹配router-key进行转发(模糊匹配)
1.6、Queue队列
用于存储具体的message消息,并向消费者提供推送服务
1.7、Binding绑定
将Exchange和Queue或Exchange进行绑定,并设置路由键
1.8、Router-key路由键
通过router-key判断message由exchange发送到哪些queue中。
*:表示匹配任意一个单词
#:表示匹配任意一个或多个单词
2、整体流程图
3、linux下安装
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management
# 开机自启
docker update rabbitmq --restart=always
二、使用
1、基础配置
1.1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.1.8.RELEASE</version>
</dependency>
1.2、引入依赖之后,RabbitAutoConfiguration会自动生效
1)、给容器中自动配置了CachingConnectionFactory、RabbitTemplate、AmqpAdmin、RabbitMessagingTemplate
2)、配置类在:RabbitProperties
@ConfigurationProperties(prefix = "spring.rabbitmq")
public class RabbitProperties {
1.3、编写配置:spring.rabbitmq 信息
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.virtual-host=/
1.4、开启@Enabled注解
@EnableRabbit
@SpringBootApplication
public class RabbitmqApplication {
2、创建Exchange、Queue、Binding
2.1、引入AmqpAdmin
@Autowired
AmqpAdmin amqpAdmin;
2.2、创建Exchange
// String name【交换机名称】,
// boolean durable【是否持久化】,
// boolean autoDelete【是否自动删除】,
// Map<String, Object> arguments
DirectExchange directExchange = new DirectExchange("java-hello-exchange",true,false);
amqpAdmin.declareExchange(directExchange);
System.out.println("创建Exchange成功");
2.3、创建Queue
//String name, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments
Queue queue = new Queue("java-hello-queue",true,false,false);
amqpAdmin.declareQueue(queue);
System.out.println("【java-hello-queue】创建完成!");
2.4、创建Binding
//String destination 【目的地】,
// DestinationType destinationType【目的地类型】,
// String exchange【交换机】,
// String routingKey【路由键】,
// Map<String, Object> arguments
// 将指定的队列绑定到指定的交换机,并设置router-key
Binding binding = new