Rabbitmq

一 rabbitmq

RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种客户端

二 AMQP

全称高级消息队列协议。是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。

三rabbitmq 功能

在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

四 集群中节点的分配

1.集群的元数据:集群及节点的相关信息,存储在集群中的每一台节点上。

2.集群中节点的类型:disc 节点:将元数据存储在磁盘上

ram 节点:将元数据存储在内存中

注:ram 节点的特点:速度较 disc 节点快,重启后内存中的数据将会丢失

3.集群中节点的分配:至少一个 disc 节点如果是单节点系统,那么节点类型只能是 disc

4.当新节点加入到集群中,或者节点从集群中退出,需要通知集群中所有的 disc 节点。

五 rabbitmq 的安装与监控

1.配置 epel 源

#cd /etc/yum.repos.d

#vim y.repo

3.安装 rabbitmq

#yum --enablerepo=y install rabbitmq-server -y

4.启动服务

#systemctl start rabbitmq-server

查看服务状态:#netstat -lantu|grep 5672

5.启用 web 管理客户端

加载 web 管理插件:

#rabbitmq-plugins enable rabbitmq_management

重启 rabbitmq:

#systemctl restart rabbitmq-server

查看服务状态:netstat -lantu|grep 15672

注:web 端默认的用户名为 guest,默认密码为 guest。如需修改密码rabbitmqctl change_password guest password

6.使用 web 端管理 rabbitmq 服务器

使用浏览器浏览:http://rabbitmq服务器的IP:15672

使用真实机浏览:http://rabbitmq服务器的IP:15672

六 rabbitmq 集群的建立

1.准备实验环境:三台虚拟机,设置好主机名(host-4,host-5,host-6)配置好 IP 地址,编辑好/etc/hosts 文件,使得三台主机可以互相解析主机名。配置 ntp,使三台主机的时间同步

2每一台都下载安装rabbitmq

#vim /etc/yum.repos.d/y.repo

在另外两台主机上也配置yum源

#scp host-4:/etc/yum.repos.d/y.repo /etc/yum.repos.d/

每一台主机下载安装rabbitmq

#yum --enablerepo=y install rabbitmq-server -y

2.在主(host-4)节点上开启 rabbitmq 服务,以获得.erlang.cookie

#systemctl restart rabbitmq-server

注:/var/lib/rabbitmq/.erlang.cookie 文件用于各节点之间的通信

3.在每个节点上

编辑 rabbitmq 的配置文件

#cd /etc/rabbitmq

#mv rabbitmq.config rabbitmq.config.bak

#vim rabbitmq.config

{rabbit,\[ {default_user,\<\<"guest"\>\>}, {default_pass,\<\<"guest"\>\>} \]}, {kernel,\[ \]} \]. ![](https://file.jishuzhan.net/article/1774212305056174081/64b87bc40e6c2b2c6a04b38c9d5c1772.webp) 注:编写配置文件一定要按照上述格式 4.在 node2、node3 上复制 node1(主节点)上的.erlang.cookie #scp host-4:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/ #chown rabbitmq. .erlang.cookie ![](https://file.jishuzhan.net/article/1774212305056174081/80f633bee2c017ae6afef1741eeba7d5.webp) 注:.erlang.cookie 的权限为 400,属主、属组应为 rabbitmq 5.重置主节点 #rabbitmqctl stop_app #rabbitmqctl start 6.将 node2、node3 加入至集群 #systemctl restart rabbitmq-server #rabbitmqctl stop_app #rabbitmqctl join_cluster --ram rabbit@host-4 #rabbitmqctl start_app ![](https://file.jishuzhan.net/article/1774212305056174081/b02e4bb91fbd8460a95aae3f570c90ef.webp) 注:node2、node3 加入集群后,可通过命令 rabbitmqctl cluster_status 来查看集群的信息 7.在每个节点上 开启 web 管理功能: #rabbitmq-plugins enable rabbitmq_management ![](https://file.jishuzhan.net/article/1774212305056174081/d36d943796d660b4a6e35436544db4eb.webp) 重启 rabbitmq-server: #systemctl restart rabbitmq-server 8.使用浏览器访问主节点:++++http://主节点 IP:15672++++ ![](https://file.jishuzhan.net/article/1774212305056174081/1bdd51d6d1b949529b155dee298a23ed.webp) ![](https://file.jishuzhan.net/article/1774212305056174081/e891a6cf6cb9949986c3e3e8f6f0825a.webp) 可见集群内各节点的状态及节点类型(disc/ram) 七 集群内节点管理 1.查看集群状态(在每个节点上都可以查看) rabbitmqctl cluster_status 2.更改节点类型(在相应的节点上操作) rabbitmqctl stop_app rabbitmqctl change_cluster_node_type ram rabbitmqctl start_app 3.从集群中移除节点 在被移除的节点上操作 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app 使用命令 rabbitmqctl cluster_status 可查看当前集群状态 ### 八 自动配置集群 1.准备实验环境:三台虚拟机,设置好主机名(node1,node2,node3)配置好 IP 地址,编辑好/etc/hosts 文件,使得三台主机可以互相解析主机名。配置 ntp,使三台主机的时间同步 2.在主节点上开启服务:#systemctl restart rabbitmq-server 3.在其他节点上: #scp root@node1:/var/lib/rabbimq/.erlang.cookie /var/lib/rabbimq 注:注意.erlang.cookie 的属主、属组应为 rabbitmq 4.在所有节点上编辑配置文件 #cd /etc/rabbitmq #mv rabbitmq.config rabbitmq.config.bak #vim rabbimq.config \[{rabbit, \[{cluster_nodes, {\['rabbit@host-4', 'rabbit@host-5', 'rabbit@host-6'\], disc}}\]}\]. ![](https://file.jishuzhan.net/article/1774212305056174081/43c73a7fbea09de0f6aab4f7e346fbff.webp) 5.所有节点重启 rabbitmq: #systemctl restart rabbitmq-server ![](https://file.jishuzhan.net/article/1774212305056174081/c658ed0d46c14ffac2b538281fc9a324.webp) 6.可通过命令:rabbitmqctl cluster_status 查看集群内节点状态也可以通过浏览器查看集群状态,但是需在每个节点上启动 web 管理功能插件

相关推荐
Asthenia041244 分钟前
Spring AOP 和 Aware:在Bean实例化后-调用BeanPostProcessor开始工作!在初始化方法执行之前!
后端
Asthenia04122 小时前
什么是消除直接左递归 - 编译原理解析
后端
Asthenia04122 小时前
什么是自上而下分析 - 编译原理剖析
后端
Asthenia04122 小时前
什么是语法分析 - 编译原理基础
后端
Asthenia04122 小时前
理解词法分析与LEX:编译器的守门人
后端
uhakadotcom2 小时前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
Asthenia04123 小时前
Spring扩展点与工具类获取容器Bean-基于ApplicationContextAware实现非IOC容器中调用IOC的Bean
后端
bobz9654 小时前
ovs patch port 对比 veth pair
后端
Asthenia04124 小时前
Java受检异常与非受检异常分析
后端