RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
可靠性
扩展性
高可用性
多种协议
多语言客户端
管理界面
插件机制
MQ 全称为Message Queue, 。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。
消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。
注意:RabbitMQ模式⼤概分为以下三种:
把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA⽅案,在对业务可靠性要求较⾼的场合中⽐较适⽤。要实现镜像模式,需要先搭建⼀个普通集群模式,在这个模式的基础上再配置镜像模式以实现⾼可⽤。
https://www.rabbitmq.com/which-erlang.html
https://packagecloud.io/rabbitmq/erlang
https://www.rabbitmq.com/news.html
yum install -y epel-release gcc-c++ unixODBC openssl-devel ncurses-devel
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
dnf -y install erlang-26.2.5.4-1.el9.x86_64
dnf -y install rabbitmq-server-3.12.13-1.el9.noarch.rpm
systemctl start rabbitmq-server
25672 rabbitmq集群的端口
5672 rabbitmq通信端口
4369 erlang与rabbitmq通信端口
rabbitmq-plugins enable rabbitmq_management 安装插件,提供web界面
15672 为web界面的端口
访问rabbitmq的web界面 192.168.17.133:15672
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator 设置admin用户为管理员角色
rabbitmqctl list_users
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
此处设置权限时注意'.*'之间需要有空格 三个'.*'分别代表了conf权限,read权限与write权限 例如:当没有给 admin设置这三个权限前是没有权限查询队列,在ui界面也看不见
dnf -y install git
git clone https://gitee.com/chainwaytsp_0/rabbitmq-test.git
修改拉取的的代码中的 settings.py 文件
dnf -y install python3-pip
pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
安装 requirements.txt
文件中列出的所有 Python 包。
python3 app.py 运行代码中的py文件
以192.168.17.133:80端口访问界面
下单1000,在rabbitmq的web界面可以看到已经有1000个在排队准备了
访问192.168.17.133:80/read,点击发货1000,观察rabbitmq的web界面
RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。
内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了
如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失。
在/etc/rabbitmq/下创建配置文件并添加以下两行代码
vim rabbitmq-env.conf
RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
RABBITMQ_LOG_BASE=/data/rabbitmq/logs
创建这两个目录,并修改这两个目录的权限和属主数组
mkdir -p /data/rabbitmq/data
mkdir /data/rabbitmq/logs
chown -R rabbitmq.rabbitmq /data
chmod -R 755 /data
将rabbitmq-1当作磁盘节点,rabbitmq-2,rabbitmq-3当作内存节点
将rabbitmq-q1 /var/lib/rabbitmq/.erlang.cookie 拷贝给rabbitmq-2,rabbitmq-3
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq-2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie rabbitmq-3:/var/lib/rabbitmq/
systemctl start rabbitmq-server 或者 systemctl restart rabbitmq-server
systemctl restart rabbitmq-server
rabbitmqctl stop_app #停止节点
#如果执行# rabbitmqctl stop_app 这条命令报错:需要执行
#chmod 400 .erlang.cookie
#chown rabbitmq.rabbitmq .erlang.cookie
rabbitmqctl reset #如果有数据需要重置,没有则不用
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1 #添加到磁盘节点
rabbitmqctl start_app #启动节点
(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq-2和mq-3是内存节点,
mq-1是磁盘节点。
(2)如果要使mq-2、mq-3都是磁盘节点,去掉--ram参数即可。
(3)如果想要更改节点类型,可以使⽤命令rabbitmqctl change_cluster_node_type
disc(ram),前提是必须停掉rabbit应⽤
#如果有需要使用磁盘节点加入集群
[root@rabbitmq-2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1
[root@rabbitmq-3 ~]# rabbitmqctl join_cluster rabbit@rabbitmq-1
rabbitmqctl add_user admin 123456 创建rabbitmq用户
rabbitmqctl set_user_tags admin administrator 设置admin用户为管理员角色
rabbitmqctl list_users 查看用户及其角色
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*" 给rabbitmq用户设置权限
在普通rabbitmq集群上的基础上,执行
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'