RabbitMq快速入门
(零)RabbitMq基本原理
基本组成
消息队列最基础的概念包括生产者,消费者,和队列。RabbitMq在生产者和 队列之间, 加入了交换器 (Exchange). 这样发消息者和队列就没有直接联系, 转而变成发消息者把消息给交换器, 交换器根据调度策略再把消息再给队列。RabbitMq基本的架构如下图:
除了交换机,Rabbit还有虚拟机的概念,一个虚拟机持有一组交换机、队列和绑定,绑定是指交换机与队列的绑定。
虚拟机是为了进行权限控制而提出的,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。
交换机类型
交换机有如下4种类型:
Direct: direct 类型的行为是”先匹配, 再投送”. 即在绑定时设定一个 routing_key, 消息的routing_key
匹配时, 才会被交换器投送到绑定的队列中去.简而言之,就是交换机根据路由键匹配队列。
Topic: 按规则转发消息(最灵活),也就是根据包含通配符的路由键匹配队列。
Headers: 设置header attribute参数类型的交换机。使用固定的路由键,但是有一个自定义匹配规则的类型.在队列与交换器绑定时, 会设定一组键值对规则,消息中也包括一组键值对( headers 属性), 当这些键值对有一对, 或全部匹配时, 消息被投送到对应队列.
Fanout:转发消息到所有绑定队列,也就是消息广播的模式,如果配置了routing_key也会被忽略
(一)安装Rabbit Server
windows安装:
安装RabbitMQ需要依赖Erlang:http://www.erlang.org/downloads
RabbitMQ官网下载:https://www.rabbitmq.com/download.html
安装完成之后,RabbitMQ会作为服务默认启动,CMD 运行: services.msc 查看服务是否成功启动:
然后还需要启动web管理插件:
在安装路径D:\Program Files\rabbitmq_server-3.7.7\sbin 下面执行
.\rabbitmq-plugins enable rabbitmq_management
启动完成之后,重启RabbitMQ服务,并访问http://localhost:15672,使用guest/guest账号登录,如下,RabbitMQ的server就已经安装完成。
(二)构建Spring Boot项目
依赖引入
<!--rabbitmq所需-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
application.yml配置
用户名密码需要自己去admin里面配置,或者使用默认的guest
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
RabbitMQ最简配置
@Configuration
public class RabbitConfig {
@Bean
public Queue helloQueue() {
return new Queue("MQ1");
}
}
编写消息队列生产者
@Component
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
String context = "MQ1: " + new Date();
System.out.println("Sender : " + context);
this.rabbitTemplate.convertAndSend("MQ1", context);
}
}
编写消息队列消费者
@Component
@RabbitListener(queues = "MQ1")
public class Receiver {
@RabbitHandler
public void process(String msg) {
System.out.println("Receiver : " + msg);
}
}
测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class SenderTest {
@Autowired
private Sender sender;
@Test
public void MQ1() throws Exception {
sender.send();
}
}
运行测试方法,可以在控制台看到如下日志:
再看RabbitMQ的web控制台:已经有了相关队列信息
本篇只是RabbitMQ入门的实现,更复杂的功能可根据业务需求改变。