目录:
(1)Fanout交换机类型介绍
(2)发送消息到Fanout交换机中
(3)Topic交换机类型介绍
(4) Topic类型消息的接收
(5)集群模式的介绍
(6)搭建普通模式集群
(7)搭建镜像模式的集群
(1)Fanout交换机类型介绍
每个发到 fanout 类型交换器的消息都会分到所有绑定的队列上去。fanout 交换器不处理路由键,只是简单的将队列绑定到交换器上,每个发送到交换器的消息都会被转发到与该交换器绑定的所有队列上。很像子网广播,每台子网内的主机都获得了一份复制的消息。fanout 类型转发消息是最快的。
(2)发送消息到Fanout交换机中
在生产者配置类RabbitMQConfig类:中声明交换机:
声明3个队列:
声明绑定关系:
在SendMessage中发送消息:
出现了队列接收到了消息
给队列加false,换成非持久化:feature缺少了D
添加其他参数
在消费者模块进行消费:
在ReceiveMesssage类中
复制3个端口号运行:8003、8004、8005
分别启动8003、8004、8005他们启动时对应上面的receiveFanoutMessage1、receiveFanoutMessage2、receiveFanoutMessage3,进行注释启动
重新启动7003:发送消息
8003接收到一条消息
8004、8005也接收一条消息:
如果停掉8005消息只能被8003、8004接收,它重新再启动也接收不到
(3)Topic交换机类型介绍
topic 交换器通过模式匹配分配消息的路由键属性,将路由键和某个模式进行匹配,此时队列需要绑定到一个模式上。它将路由键和绑定键的字符串切分成单词,这些单词之间用点隔开。它同样也会识别两个通配符:符号“#”和符号“*”。#匹配0个或多个单词,“*”匹配不多不少一个单词。
(4) Topic类型消息的接收
首先在生产者模块中RabbitMQConfig类中:声明交换机、队列、绑定关系
在SendMessage类中发送消息:
在启动类RabbitMQ7003Application中调用方法发送消息:
运行启动类:发现对类中消息的数目total1,1,3根接收的规则是一样的
在接收者Modul中的ReceiveMessage类中接收消息:
(5)集群模式的介绍
普通模式(默认):对于Queue来说,消息实体只存在于其中的一个节点,A/B两个节点仅有相同的元数据,即队列结构.(交换机的所有元数据在所有节点上是一致的,而队列的完整信息只有在创建它的节点上,各个节点仅有相同的元数据,即队列结构)当消息进入A节点的Queue中后,consumer从B节点拉取数据时,RabbitMQ会临时在A.B间进行消息传输,把A中的消息实体取出并经过B发送给consumer.所以consumer应尽量连接每个节点,从中取消息.即对于同一个逻辑队列,要在多个节点建立物理Queue,否则无论consumer连A或B,出口总在A,会产生瓶颈.该模式存在一个问题就是当A节点故障后,B节点无法取到A节点中还未消费的消息实体.如果做个消息持久化,那么等A几点恢复,然后才可被消费;如果没有做持久化,然后就...该模式非常适合非持久化队列,只有该队列是非持久化的,客户端才能重新连接到集群中的其他节点,并且重新创建队列,如果该队列是持久化的,那么唯一的办法就是将故障节点恢复起来.
镜像模式(高可用模式):把需要的队列做成镜像模式,存在于多个节点,数据Rabbitmq的HA方案.该模式解决了上述问题,其实质和普通模式的不同之处在于,消息实体会主动在镜像节点间同步,而不会在consumer取数据时临时拉取.该模式带来的副作用也很明显,除了降低系统性能意外,如果镜像队列过多,加之有大量的消息进入,集群内部的网络带宽将会被这种同步通讯大大消耗掉,所以在对可靠性要求较高的场合中适用.
(6)搭建普通模式集群
执行vi /etc/hosts 文件内容如下
127.0.0.1 A localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 A localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.222.129 A 192.168.222.130 B |
注意:2台Linux服务器需要完成同样的操作
关闭防火墙确保2台机器相互ping 同可以执行ping A 和ping B命令进行测试
在2台Linux服务中分别安装RabbitMQ
安装RabbitMQ之前必须要先安装所需要的依赖包可以使用下面的一次性安装命令
yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto -y
安装Erlang
1、 将Erlang源代码包otp_src_19.3.tar.gz上传到Linux的/home目录下
2、解压erlang 源码包
tar -zxvf otp_src_19.3.tar.gz
3、手动创建erlang 的安装目录
mkdir /usr/local/erlang
4、进入erlang的解压目录
cd otp_src_19.3
5、配置erlang的安装信息
./configure --prefix=/usr/local/erlang --without-javac
6、编译并安装
make && make install
7、配置环境变量
vim /etc/profile
8、将这些配置填写到profile文件的最后
ERL_HOME=/usr/local/erlang
PATH=$ERL_HOME/bin:$PATH
export ERL_HOME PATH
9、启动环境变量配置文件
source /etc/profile
安装RabbitMQ
1、将RabbitMQ安装包rabbitmq-server-3.7.2-1.el7.noarch.rpm上传到/home目录
2、安装RabbitMQ
rpm -ivh --nodeps rabbitmq-server-3.7.2-1.el7.noarch.rpm
3、安装管控台插件
rabbitmq-plugins enable rabbitmq_management
注意:需要分别在2台Linux服务器中安装RabbitMQ
配置Cookie文件
Erlang Cookie是保证不同节点可以互相通信的秘钥,要保证集群中的不同节点互相通信必须共享相同的Erlang Cookie,具体存放在/var/lib/rabbitmq/.erlang.cookie
例如
[root@A ~]# cat /var/lib/rabbitmq/.erlang.cookie MZFQSBXIIJJMUZRTJFWQ [root@A ~]# ~ |
必须要保证2台Linux的Cookie 文件内容完全相同,可以选择使用vim进行编辑
也可以使用scp命令完成文件跨机器拷贝例如
[root@A ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.222.130:/var/lib/rabbitmq |
注意:由于这个文件的权限是只读因此无论是使用vim还是scp来实现Cookie文件的同步都会失败,因此必须要修改这个文件的权限,
例如 chmod 777 /var/lib/rabbitmq/.erlang.cookie
当Cookie文件同步完成以后再修改权限回只读
例如 chmod 400 /var/lib/rabbitmq/.erlang.cookie
组建集群
分别启动2台Linux机器中的RabbitMQ服务器
rabbitmqctl stop rabbitmq-server -detached |
注意:rabbitmq-server –detached 表示在后台运行
启动之后进行开放端口:
将某个RabbitMQ加入到某个服务器节点
rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@A rabbitmqctl start_app |
注意:
rabbitmqctl join_cluster rabbit@A 命令中的A为某个机器的hostname,在hostname为B的机器中执行这些命令
停下某一个节点,加入另外一个上,在加入时出现不能连接4369、25672,需要开启另外一台的端口
开启另外一台节点的的端口
这台节点也开启下端口,重新加入:就加入成功了,可以启动了
查看集群状态确认节点成功添加
[root@B ~]# rabbitmqctl cluster_status Cluster status of node rabbit@B ... [{nodes,[{disc,[rabbit@A,rabbit@B]}]}, {running_nodes,[rabbit@A,rabbit@B]}, {cluster_name,<<"rabbit@A">>}, {partitions,[]}, {alarms,[{rabbit@A,[]},{rabbit@B,[]}]}] [root@B ~]# |
注意:
当查看节点状态时发现2台机器的节点同时显示机表示集群搭建完成
查看节点状态:
现在就是一个节点集群了
其他命令
如果要将某个节点从集群中移除,使其变回独立节点,可以使用以下命令:
rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app |
使用SpringBoot连接RabbitMQ集群
配置RabbitMQ的账号
分别为2台Linux中的RabbitMQ添加账号并进行授权
rabbitmqctl add_user root root rabbitmqctl set_user_tags root administrator rabbitmqctl set_permissions -p / root '.*' '.*' '.*' |
在两台里面添加完角色以后就可以使用root登录了:
SpringBoot配置
修改SpringBoot的application.properties文件进行集群的继承
#spring.rabbitmq.port=5672 #配置RabbitMQ的集群访问地址 |
修改创建者的端口:发送的时候为137的节点
修改消费者的端口:接收的时候从130接收:
启动消息的发送者启动类:出现了节点
启动消费者:
重新启动消息的发送者主启动类,这个时候停掉30端口节点:
这个时候B节点就没了:
这个时候就不能去130端口消费了
重新启动B节点:
(7)搭建镜像模式的集群
需要配置我们的策略信息
添加所有节点为高可用的模式
重新发送消息:就会镜像同步到节点当中
启动消费者消费: