简介
MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。其中较为成熟的MQ产品有IBM WEBSPHERE MQ等等。
特点
MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
实验环境
主机名 | IP地址 | 操作系统 | 用途 |
---|---|---|---|
mq01 | 192.168.100.75 | CentOS_7.4_x86_64 | 磁盘节点 |
mq02 | 192.168.100.76 | CentOS_7.4_x86_64 | 内存节点 |
mq03 | 192.168.100.77 | CentOS_7.4_x86_64 | 内存节点 |
搭建步骤
一、准备工作
1、关闭防火墙及selinux
[root@redhat7_5 ~]# systemctl stop firewalld.service
[root@redhat7_5 ~]# systemctl disable firewalld.servic
[root@mq01 ~]# vim /etc/sysconfig/selinux
2、修改主机名及hosts文件
[root@redhat7_5 ~]# vim /etc/hostname
mq01.localdomain #添加主机名,第一台mq01依次为mq02、mq03
[root@redhat7_5 ~]# vim /etc/hosts #其他三台都是这样配
#末行添加
192.168.100.75 mq01
192.168.100.76 mq02
192.168.100.77 mq03
[root@redhat7_5 ~]# shutdown -r now #重启服务
二、配置RabbtiMQ(三台配置相同)
1、安装RobbtiMQ软件
[root@mq01 ~]# yum -y install epel-release #安装epel源文件
[root@mq01 ~]# yum -y install rabbitmq-server #安装rabbtimq服务器端
2、优化路径
[root@mq01 ~]# ln -s /usr/lib/rabbitmq/bin/* /usr/bin/ #优化路径
3、启动相关服务
[root@mq01 ~]# rabbitmq-plugins enable rabbitmq_management #启动web端管理服务
[root@mq01 ~]# systemctl start rabbitmq-server.service #启动rabbitmq服务
[root@mq01 ~]# rabbitmq-plugins list #查看rabbitmq安装模块及其版本号
[root@mq01 ~]# rabbitmqctl cluster_status #检查三台的集群状态,目前相互独立,没有形成集群。
Cluster status of node rabbit@mq01 …
[{nodes,[{disc,[rabbit@mq01]}]},
{running_nodes,[rabbit@mq01]},
{cluster_name,<<"rabbit@mq01">>},
{partitions,[]}]
...done.
[root@mq01 ~]# netstat -anpt | grep 5672 #查看端口号
三、构建群集(三台都配置相同)
1、编辑cookie id
[root@mq01 ~]# systemctl stop rabbitmq-server.service #停止三台服务
[root@mq01 ~]# vim /var/lib/rabbitmq/.erlang.cookie #三台值配置成一样的,将mq01的cookie id 复制内容到其他两台
ORPMEUFAADFUFEXAUHIJ
[root@mq01 ~]# systemctl start rabbitmq-server #启动三台服务
2、配置群集
[root@mq02 ~]# rabbitmqctl stop_app #两台内存节点操
Stopping node rabbit@mq02 ...
...done.
[root@mq02 ~]# rabbitmqctl join_cluster --ram rabbit@mq01 #以内存节点形式加入到磁盘节点
rabbitmqctl start_app
[root@mq01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@mq01 ...
[{nodes,[{disc,[rabbit@mq01]},{ram,[rabbit@mq03,rabbit@mq02]}]}, #mq01属于磁盘节点,mq02、mq03属于内存节点
{running_nodes,[rabbit@mq03,rabbit@mq02,rabbit@mq01]}, #显示各节点,构成了群集
{cluster_name,<<"rabbit@mq01">>},
{partitions,[]}]
...done.