RabbitMQ是实现了AMQP(高级消息队列协议)的开源消息代理软件。RabbitMQ服务器是用Erlang语言编写的,而聚类和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
AMQP从上到下分为:Model(提供命令)、Session(协议处理)、Transport(数据传输)
1. 结构
-
Broker RabbitMQ服务器(或集群中的一个实例)
-
vhost 可以对每个vhost进行权限设置,默认“/”
-
queue 一个vhost包含多个queue
-
exchange 交换机,默认发送到以“队列名"为bindingKey的队列。
-
bind 交换机与queue的绑定。direct与topic用的多。
-
productor 消息生产者
-
connection 连接 一个连接可以建立多个channel
fanout类型(bindingKey类型):转发所有queue
direct类型(bindingKey类型):通过bindkey匹配消息的routingKey,发送给特点的queue
topic类型(bindingKey类型):提供模糊匹配
header类型:message 的header 匹配 -
channel 通道 queue、exchange等都是基于channel操作的
-
message 分为label 和 body。
label 在label设置routingKey,用于bind做匹配
body 消息体
-
consumer 消费者
-
Qos 预推送 MQ 每次推送给消费者的消息数量。比较重要的调优参数
2. 角色划分
none、management、policymaker、monitoring、administrator
See:https://www.rabbitmq.com/management.html
3. 集群高可用
相同的.erlang.cookie文件复制到不同的集群
同步方式:
- RabbitMQ支持
普通模式 默认 同步元数据
镜像模式 通过策略设置 同步所有数据同步
- 广域网集群(版本不同、网络差都可以,但是同步性比较差)
Federation Shovel
4. 持久化机制
消息、队列、交换器都可以持久化
可以设置阈值,超过阈值后会阻塞
-
内存
最大内存
内存换页阈值
-
磁盘
剩余磁盘阈值:可以设置与内存相当
5. 操作工具
rabbitmqctl
Rabbitmq-plugins