RabbitMQ入门

MQ:MessageQueue,消息队列;
MQ的作用主要有以下三个方面:
异步: 能提供系统的响应速度,吞吐量。
解耦:服务之间进行解耦,才可以减少服务之间的影响。
削峰:以稳定的系统资源应对突发的流量冲击。

常用的MQ有:
RabbitMQ,RocketMQ,Kafka等;
接下来主要学习RabbitMQ;

一:RabbitMQ集群搭建

默认的普通的集群模式:
使用Erlang语言天生具备的集群方式搭建,集群的各个节点之间只会有相同的元数据,即队列结构,而消息不会进行冗余,只存在一个节点中。消费时,如果消费的不算存有数据的节点,RabbitMQ会临时在节点之间进行数据传输,将消息从存有数据的节点传输到消费的节点。

镜像模式:
这种模式是在普通集群模式基础上的一种增强方案,官方HA高可用方案。本质的区别在于,这种模式会在镜像节点中间主动进行消息同步,而不是在客户端拉取消息时临时同步;

搭建普通集群
1.需要同步集群节点中的cookie
默认会在/var/lib/rabbitmq目录下生成一个.erlang.cookie.里面有一个字符串,我们要做的就算保证集群中的三个节点的这个cookie字符串一致。
2.将worker1的服务加入到worker2中的集群中
首先需要保证worker1上的rabbitmq服务正常,然后执行以下指令

[root@worker1 rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@worker1 ...
[root@worker1 rabbitmq]# rabbitmqctl join_cluster --ram rabbit@worker2
Clustering node rabbit@worker1 with rabbit@worker2
[root@worker1 rabbitmq]# rabbitmqctl start_app
Starting node rabbit@worker1 ...

3.然后使用同样的方式将worker3加入到worker2中。

搭建镜像集群
在之前的基础上,就可以继续搭建镜像集群。
1.先创建一个/mirror的虚拟主机,然后再添加给对应的镜像策略:

[root@worker2 rabbitmq]# rabbitmqctl add_vhost /mirror
Adding vhost "/mirror" ...
[root@worker2 rabbitmq]# rabbitmqctl set_policy ha-all --vhost "/mirror" "^"
'{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority
"0" for vhost "/mirror" ...

基础使用
1.虚拟主机 virtual host

2.连接Connection

3.信道Channel:每个信道都会被分配一个唯一的ID,会在一个Connection中建立多个Channel,这样便于客户端进行多线程连接。

4.交换机Exchange

5.队列Queue:实际保存数据的最小单位。FIFO,经典队列Classic. RabbitMQ3.8中添加了Quorum队列,3.9中添加了Stream。
5.1Classic经典队列:
5.2Quorum仲裁队列:Quorum是基于Raft一致性协议实现的一种新型的分布式消息队列
5.3Stream队列:是以append-only只添加的日志来记录消息

SpringBoot集成RabbitMQ
1.引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2.使用RabbitmqTemplate对象发送消息

3.使用@RabitListener注解声明消费者


版权声明:本文为qq_35529931原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。