rabbitmq

rabbitmq

5672:消费者访问的 端口
15672:web管理端口
25672:集群状态通信端口

使用epel源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum install epel-release -y
yum install -y rabbitmq-server

修改HOSTS

echo -e "192.168.10.201 rabbitmq1
192.168.10.202 rabbitmq2
192.168.10.203 rabbitmq3" >> /etc/hosts
cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.201 rabbitmq1
192.168.10.202 rabbitmq2
192.168.10.203 rabbitmq3

启动服务

systemctl start rabbitmq-server

开启web管理界面插件

[root@rabbitmq1 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
  mochiweb
  webmachine
  rabbitmq_web_dispatch
  amqp_client
  rabbitmq_management_agent
  rabbitmq_management
Plugin configuration has changed. Restart RabbitMQ for changes to take effect.

重启rabbitMQ服务

systemctl restart rabbitmq-server 

浏览器访问

http://192.168.10.201:15672/#/
用户名和密码均为guest

部署 rabbitMQ 集群
Rabbitmq 的集群是依赖于 erlang 的集群来工作的,所以必须先构建起 erlang 的集群环境。而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的,这个 cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是 400 的权限。所以必须保证各节点 cookie 保持一致,否则节点之间就无法通信。

将各节点 cookie 保持一致
cat /var/lib/rabbitmq/.erlang.cookie

重启节点
systemctl restart rabbitmq-server

查看各 rabbitMQ 服务的集群状态
当前是独立运行的

[root@rabbitmq1 ~]# rabbitmqctl  cluster_status
Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1]}]},
 {running_nodes,[rabbit@rabbitmq1]},
 {cluster_name,<<"rabbit@rabbitmq1">>},
 {partitions,[]}]
...done.

[root@rabbitmq2 ~]# rabbitmqctl  cluster_status
Cluster status of node rabbit@rabbitmq2 ...
[{nodes,[{disc,[rabbit@rabbitmq2]}]},
 {running_nodes,[rabbit@rabbitmq2]},
 {cluster_name,<<"rabbit@rabbitmq2">>},
 {partitions,[]}]
...done.

[root@rabbitmq3 ~]# rabbitmqctl  cluster_status
Cluster status of node rabbit@rabbitmq3 ...
[{nodes,[{disc,[rabbit@rabbitmq3]}]},
 {running_nodes,[rabbit@rabbitmq3]},
 {cluster_name,<<"rabbit@rabbitmq3">>},
 {partitions,[]}]
...done.

将 rabbitMQ 的节点添加到集群
将rabbitmq2添加为内存节点

#停止应程序
[root@rabbitmq2 ~]# rabbitmqctl  stop_app
Stopping node rabbit@rabbitmq2 ...
...done.
 #清空元数据
[root@rabbitmq2 ~]# rabbitmqctl   reset
Resetting node rabbit@rabbitmq2 ...
...done.
#将此节点添加至rabbitmq1中,并成为内存节点,不加--ram默认是磁盘节点
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1 --ram
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq1 ...
...done.
#启动应程序
[root@rabbitmq2 ~]# rabbitmqctl  start_app
Starting node rabbit@rabbitmq2 ...
...done.

将rabbitmq3添加为磁盘节点

rabbitmqctl  stop_app #停止应程序
rabbitmqctl  reset #清空元数据
rabbitmqctl  join_cluster rabbit@rabbitmq1#将rabbitmq1添加到集群当中,并成为磁盘节点,不加--ram默认是磁盘节点
rabbitmqctl  start_app #启动应程序

使用浏览器访问
rabbitmq

更改为镜像模式

rabbitmqctl set_policy  ha-all "#"  '{"ha-mode":"all"}' #"#"为任意0个或多个即为所有,也可以使用"^test"匹配开头,还可以使用其他正则匹配
[root@rabbitmq3 ~]# rabbitmqctl set_policy  ha-all "#"  '{"ha-mode":"all"}' #"#"
Setting policy "ha-all" for pattern "#" to "{"ha-mode":"all"}" with priority "0" ...
...done.

enter description here
enter description here

任意节点验证

rabbitmqctl  list_queues

安装 pika 模块
epel源
yum install python-pip
pip install pika

生产者代码

[root@Final ~]# cat mq.py 
#!/bin/env  python
#coding:utf-8
import  pika
#用户名密码
cert = pika.PlainCredentials("guest","guest")
#连接到rabbitMQ服务器
conn = pika.BlockingConnection(pika.ConnectionParameters("192.168.10.201",5672,"/",cert))
#创建频道
chanel = conn.channel()
#声明消息队列,如果队列不存在就创建,存在就将消息在此队队列中创建,如果将消息发送到不存在的队列,则rabbitMQ会自动清除这些消息
chanel.queue_declare(queue="test1")
#exchange告诉消息去往的队列,routing_key是队列名,body是要传递的消息内容
chanel.basic_publish(exchange="",
             routing_key="test",
                     body="hello world!")
print("开始队列")
#消息写入完成,关闭连接
conn.close()

消费者代码

[root@Final ~]# cat test.py 
#!/bin/env  python
#coding:utf-8
import  pika
#用户名
cert = pika.PlainCredentials("guest","guest")
#连接到服务器
conn = pika.BlockingConnection(pika.ConnectionParameters("192.168.10.201",5672,"/",cert))
#创建频道
channel = conn.channel()
#声明消息队列,如果不存在就创建
channel.queue_declare(queue="test1")
# 定义一个回调函数来处理,这边的回调函数就是将信息打印出来。
def callback(ch,method,properties,body):
    print("[x] Received %r" % body)

channel.basic_consume('test',callback,
                      auto_ack=False,
                      exclusive=False,
                      consumer_tag=None,
                      arguments=None)

print(' [*] Waiting for messages. To exit press CTRL+C')
# 开始接收信息,并进入阻塞状态,队列里有信息才会调用callback进行处理。按ctrl+c退出。
channel.start_consuming()

执行结果
rabbitmq

rabbitmq
rabbitmq

原文地址:https://www.cnblogs.com/fina/p/11315585.html