RabbitMQ介绍
RabbitMQ是使用Erlang语言来编写的,基于AMQP协议,是跨平台、跨语言的一个消息代理和队列服务器。
高性能的原因:Erlang语言,面向并发的编程语言。使用于交换机领域,进行数据交互的性能十分优秀。有与原生Socket一样的延迟。
AMQP介绍
基本概念
AMQP:Advanced Message Queuing Protocol(高级消息队列协议)。基于二进制的协议。一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
协议模型

核心概念
Server:又称Broker,接受客户端的连接,实现AMQP实体服务。Connection:连接,应用程序与Broker的网络连接。Channel:网络信道,几乎所有操作都在Channel中进行,是进行消息读写的通道。客户端可建立多个Channel,每个代表一个会话任务。Message:消息,服务器和应用程序之间传递的数据。由Properties和Body组成。Properties可以对消息进行修饰,如消息的优先级、延迟等高级特性,Body是消息体的内容。Virtual Host:虚拟地址,用于逻辑隔离,最上层的消息路由(划分具体的服务)。一个Virtual Host可以有若干个Exchange和Queue,但同一个Virtual Host不能有相同名称Exchange或Queue。Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列,可对消息进行过滤。Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key。
– Routing key:一个路由规则,虚拟机用它来确定如何路由一个特定消息。(交换路由)
Queue:又称为Message Queue,消息队列,保存消息并将它们转发给消费者。
RabbitMQ的架构
架构图


Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue。Exchange:消息队列交换机,按一定的规则将消息路由转发到某个队列,对消息进行过虑。Queue:消息队列,存储消息的队列,消息到达队列并转发给指定的消费方。Producer:消息生产者,即生产方客户端,生产方客户端将消息发送到MQ。Consumer:消息消费者,即消费方客户端,接收MQ转发的消息。
消息发布接收流程:
-
发送消息
- 生产者和
Broker建立TCP连接。 - 生产者和
Broker建立通道。 - 生产者通过通道消息发送给
Broker,由Exchange将消息进行转发。 Exchange将消息转发到指定的Queue(队列)
- 生产者和
-
接收消息
- 消费者和
Broker建立TCP连接 。 - 消费者和
Broker建立通道。 - 消费者监听指定的
Queue(队列) - 当有消息到达
Queue时Broker默认将消息推送给消费者。 - 消费者接收到消息。
- 消费者和
消息流转

生产者生产出Message并投递到Exchange上。
一个Exchange可以绑定多个Message Queue,它根据路由策略(routing key)路由到指定的队列。
最后由消费端去监听队列。
RabbitMQ安装与使用
安装(rpm方式):
下载对应版本的Erlang和RabbitMQ。
- 安装
erlang:

- 安装
socat密钥:
要先安装socat再安装rabbitmq,不然会报错。 - 安装
rabbitmq:

修改配置文件
vim /usr/lib/rabbitmq/lib/rabbitmq_server-3.6.5/ebin/rabbit.app
默认端口号5672

修改loopback_users:(保留guest也可)

RabbitMQ基本命令
关于服务的操作:
- 服务启动:
rabbitmqctl start_app / rabbitmq-server start &
这里有用到主机名,可以通过vim /etc/hostname来配置。

可以看到rabbitmq已经启动:- 查看服务是否启动
lsof -i:5672

- 查看服务是否启动
- 服务停止:
rabbitmqctl stop_app / rabbitmq-server stop - 服务重启:
service rabbitmq-server restart - 节点状态:
rabbitmqctl status - 启动管理控制台:
- 管理插件:
rabbitmq-plugins enable rabbitmq_management - 控制台访问地址:
http://192.168.58.129:15672
- 管理插件:
如果既修改过配置文件,又开启了插件,但是还访问失败,可以看下是不是没有关闭防火墙。
firewalld的基本使用
- 启动:
systemctl start firewalld - 关闭:
systemctl stop firewalld - 查看状态:
systemctl status firewalld - 开机禁用:
systemctl disable firewalld - 开机启用:
systemctl enable firewalld

关于用户的操作:
- 添加用户:
rabbitmqctl add_user username password - 列出所有用户:
rabbitmqctl list_users - 删除用户:
rabbitmqctl delete_user username - 清除用户权限:
rabbitmqctl clear_permissions -p vhostpath username - 列出用户权限:
rabbitmqctl list_user_permissions username - 修改密码:
rabbitmqctl change_password username newpassword - 设置用户权限:
rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*"
关于虚拟主机的操作:
- 创建虚拟主机:
rabbitmqctl add_vhost vhostpath - 列出所有虚拟主机:
rabbitmqctl list_vhost - 列出虚拟主机上所有权限:
rabbitmqctl list_permissions -p vhostpath - 删除虚拟主机:
rabbitmqctl delete_vhost vhostpath
关于消息队列的操作:
- 查看所有队列信息:
rabbitmqctl list_queues - 清除队列里的消息:
rabbitmqctl -p vhostpath purge_queue blue
RabbitMq高级命令
rabbitmqctl reset:移除所有数据,要在rabbitmqctl stop_app之后使用。- 组成集群命令:
rabbitmqctl join_cluster <clusternode> [--ram](ram内存级别存储,disc磁盘) - 查看集群状态:
rabbitmqctl cluster_status - 修改集群节点的存储形式:
rabbitmqctl change_cluster_node_type disc | ram - 忘记(摘除)节点:
rabbitmqctl forget_cluster_node [--offline](offline服务不启动的情况下) - 修改节点名称:
rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...]
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END






![[live streaming] CG&WebGL&Threejs知识以及学习思维分享。-一一网](https://www.proyy.com/skycj/data/images/2022-03-15/9ecae33bcf473a78a9e5d68ca77c09e8.jpg)














![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)