-
安装
下面是有Windows和Linux不同系统下的详细安装步骤,这了不再做介绍
安装步骤这里需要注意RabbitMQ默认服务的端口是5672,管理RabbitMQ的WEBUI默认端口为15672。
-
AMQP
即Advanced Message Queuing Protocol,一个提供统一消息服务的应用 层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间 件设计。基于此协议的客户端与消息中间件可传递消息
以上是百度百科的介绍,
AMQP主要是为解耦,生产者不用知道接收者是谁,同理,接收者也不用知道生产者是谁,可靠,安全。 RabbitMQ
是AMQP中的一个开源的实现。使用Erlang语言开发,所以我安装RabbitMQ需要配置Erlang环境,
-
为什么使用RabbitMQ
综合选择RabbitMQ
-
原理
消息队列一般有三个概念:- 生产者
- 队列
- 消费者
顾名思义相信大家都可以理解
而RabbitMQ在此基础上添加了一层交换器抽象层,
当你想要将消息投递到队列时,你通过把消息发送给交换器来完成。然后,根据确定的规则,RabbitMQ将会决定消息该投递到哪个队列,这些规则被称为路由键(routing key)。队列通过路由键绑定到交换器,当你把消息发送到代理服务器时,消息将拥有一个路由键(即使是空的)
Rabbit也会将其和绑定使用的路由键进行匹配,如果匹配的话,那么消息将会投递到队列,如果路由的消息不匹配任何绑定模式的话,消息将进入“黑洞”
交换器有四种类型
- Direct: 先匹配,在投送,
- Topic: 按照特定的规则匹配
- Headers: 按照自定义规则匹配
- Fanout: 全部队列匹配
实操上代码
- AMQP依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- application.properties中配置
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
- 队列配置
@Configuration
public class RabbitConfig {
@Bean
public Queue aQueue(){
return new Queue("hello");
}
@Bean
public Queue bQueue(){
return new Queue("helloB");
}
}
多个队列在此列中照例加就可以
- 消息生产者
@Component
public class HelloSender {
//Spring boot 提供的默认实现
@Autowired
private AmqpTemplate amqpTemplate;
public void send() {
String context = "hello" + new Date();
System.out.println("sender: " + context);
//使用默认实现发送消息
this.amqpTemplate.convertAndSend("hello", context);
}
}
- 接收者
@Component
@RabbitListener(queues = "hello")
public class HelloRec {
@RabbitHandler
public void process(String hello){
System.out.println("rec:" + hello);
}
}
- 测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class BootRabbitmqApplicationTests {
@Autowired
private HelloSender helloSender;
@Test
public void contextLoads() {
helloSender.send();
}
}
注意: