rabbitmq学习笔记

RabbiMQ简介

RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

2、RabbitMQ 特点

  • 可靠性

  • 扩展性

  • 高可用性

  • 多种协议

  • 多语言客户端

  • 管理界面

  • 插件机制

3、什么是消息队列

       MQ 全称为Message Queue,  。是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。

消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信。

RabbiMQ模式

注意:RabbitMQ模式⼤概分为以下三种:

(1)单⼀模式。

(2)普通模式(默认的集群模式)。

(3) 镜像模式

把需要的队列做成镜像队列,存在于多个节点,属于RabbiMQ的HA⽅案,在对业务可靠性要求较⾼的场合中⽐较适⽤。要实现镜像模式,需要先搭建⼀个普通集群模式,在这个模式的基础上再配置镜像模式以实现⾼可⽤。

rabbitmq单节点部署

# rabbitmq 和erlang兼容版本

https://www.rabbitmq.com/which-erlang.html
 

# erlang 版本选择

https://packagecloud.io/rabbitmq/erlang
 

# rabbitmq 版本选择

https://www.rabbitmq.com/news.html

首先安装依赖

yum install -y epel-release gcc-c++ unixODBC openssl-devel ncurses-devel

yum安装erlang

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

安装rabbitmq

 dnf -y install rabbitmq-server-3.12.13-1.el9.noarch.rpm 

启动rabbitmq

systemctl start rabbitmq-server

启动rabbitmq有三个端口

25672  rabbitmq集群的端口

5672    rabbitmq通信端口

4369    erlang与rabbitmq通信端口

rabbitmq开启web界面

rabbitmq-plugins enable rabbitmq_management     安装插件,提供web界面

会多出一个端口:

15672    为web界面的端口

访问rabbitmq的web界面   192.168.17.133:15672

创建rabbitmq用户

rabbitmqctl add_user admin 123456

给创建的rabbitmq用户设置角色

 rabbitmqctl set_user_tags admin administrator         设置admin用户为管理员角色

查看用户及其角色

rabbitmqctl list_users

给rabbitmq用户设置权限

rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

此处设置权限时注意'.*'之间需要有空格 三个'.*'分别代表了conf权限,read权限与write权限 例如:当没有给 admin设置这三个权限前是没有权限查询队列,在ui界面也看不见
 

安装MySQL

rabbitmq拉取代码做测试

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的集群部署

rabbitmq集群有两种节点

RabbitMQ的集群节点包括内存节点、磁盘节点。顾名思义内存节点就是将所有数据放在内存,磁盘节点将数据放在磁盘。如果在投递消息时,打开了消息的持久化,那么即使是内存节点,数据还是安全的放在磁盘。

内存节点虽然不写入磁盘,但是它执行比磁盘节点要好。集群中,只需要一个磁盘节点来保存状态 就足够了

如果集群中只有内存节点,那么不能停止它们,否则所有的状态,消息等都会丢失

rabbitmq普通集群部署

先在三台机器上都单点部署rabbitmq,做到上文的开rabbitmq的web界面,三台机器都修改主机名并且解析主机名

如果是从一台服务器克隆出来的的三台,需要在rabbit目前的数据录/var/lib/rabbitmq rabbit目前的数据目录下的数据全部删除  rm -rf  *

修改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

拷贝/var/lib/.erlang.cookie (注意是隐藏文件)

将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/

启动全部的rabbitmq

systemctl start rabbitmq-server    或者 systemctl restart rabbitmq-server

在mq-2、mq-3执⾏如下命令

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"}'

你可能感兴趣的:(rabbitmq,学习,笔记)