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 管理功能插件

相关推荐
小破农2 分钟前
C++篇——多态
开发语言·c++
Q_Q19632884754 分钟前
python的漫画网站管理系统
开发语言·spring boot·python·django·flask·node.js·php
言之。4 分钟前
Go 语言中接口类型转换为具体类型
开发语言·后端·golang
咖啡の猫6 分钟前
JavaScript基础-创建对象的三种方式
开发语言·javascript·ecmascript
代码不停13 分钟前
Java二叉树题目练习
java·开发语言·数据结构
77tian26 分钟前
VMware中快速安装与优化Ubuntu全攻略
开发语言·ubuntu
愚润求学1 小时前
【Linux】进程间通信(一):认识管道
linux·运维·服务器·开发语言·c++·笔记
diving deep1 小时前
XML简要介绍
xml·java·后端
椰椰椰耶1 小时前
【RabbitMQ】整合 SpringBoot,实现工作队列、发布/订阅、路由和通配符模式
spring boot·rabbitmq·java-rabbitmq
珊瑚里的鱼1 小时前
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
开发语言·c++·笔记·算法·leetcode·stl