内容简介:MQ(Message Queue,消息队列)是一款消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。rabbitmq是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitm
RabbitMQ
MQ(Message Queue,消息队列)是一款消息中间件,一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。
集群原理
rabbitmq是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点。
rabbitmq集群中,各个rabbitmq为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般的,均应建立为磁盘节点,为了防止机器重启后的消息消失;
RabbitMQ的Cluster集群模式一般分为两种, 普通模式和镜像模式 。消息队列通过rabbitmq HA镜像队列进行消息队列实体复制。
普通模式下,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。
镜像模式下,将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。
系统架构
概念说明:
Broker:它提供一种传输服务,它的角色就是维护一条从生产者到消费者的路线,保证数据能按照指定的方式进行传输
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列
Queue:消息的载体,每个消息都会被投到一个或多个队列
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来
Routing Key:路由关键字,exchange根据这个关键字进行消息投递
vhost:虚拟主机,一个broker里可以有多个vhost,用作不同用户的权限分离
Producer:消息生产者,就是投递消息的程序
Consumer:消息消费者,就是接受消息的程序
Channel:消息通道,在客户端的每个连接里,可建立多个channel
系统环境
| 主机名 | 操作系统 | IP地址 | 用途 |
|---|---|---|---|
| rabbitmq01 | Centos 7.4 x86_64 | 192.168.96.41 | 磁盘节点 |
| rabbitmq02 | Centos 7.4.x86_64 | 192.168.96.42 | 内存节点 |
| rabbitmq03 | Centos 7.4 x86_64 | 192.168.96.43 | 内存节点 |
开始部署
以下三台服务器部署配置一致,如下步骤1 - 8
1.关闭防火墙及Selinux
setenforce 0 systemctl stop firewalld
2.分别修改三台服务器的主机名
2.1 rabbitmq01服务器
vim /etc/hostname
rabbitmq01
2.2 rabbitmq02服务器
vim /etc/hostname
rabbitmq02
2.3 rabbitmq03服务器
vim /etc/hostname
rabbitmq03
3.分别修改三台服务器的hosts文件
vim /etc/hosts
192.168.96.23 rabbitmq01 192.168.96.21 rabbitmq02 192.168.96.22 rabbitmq03
4.安装最新repo源
yum -y install epel-release
5.安装rabbitmq-server软件包
yum -y install rabbitmq-server
6.查看已安装的插件
rabbitmq-plugins list
7.启动管理服务
rabbitmq-plugins enable rabbitmq_management
8.分别启动rabbitmq服务
systemctl start rabbitmq-server
rabbitmq集群部署
1.先停止rabbitmq服务
systemctl stop rabbitmq-server
2.进入cookie文件目录
cd /var/lib/rabbitmq/
3.编辑.erlang.cookie文件序列号(各节点需要有相同序列号值)
vim .erlang.cookie
4.再启动rabbitmq服务
systemctl start rabbitmq-server
5.停止rabbitmq应用
rabbitmqctl stop_app
6.将rabbitmq02、rabbitmq03加入rabbitmq01,使它们成为一个集群
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
7.启动rabbitmq应用
rabbitmqctl start_app
8.分别查看rabbitmq服务器状态
rabbitmqctl cluster_status
通过客户端浏览器进行访问RabbitMQ (用户名:guest 密码:guest) http://192.168.96.41:15672
以上所述就是小编给大家介绍的《RabbitMQ消息队列集群》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Spring Boot 2 整合 Redis 哨兵集群,实现消息队列场景
- 分布式消息队列 XXL-MQ v1.2.0,集群时移除 ZK 依赖更轻量级
- 分布式消息队列 XXL-MQ v1.2.0,集群时移除 ZK 依赖更轻量级
- rabbitmq实现延时队列(死信队列)
- 消息队列(三)常见消息队列介绍
- 消息队列探秘 – RabbitMQ 消息队列介绍
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Cascading Style Sheets 2.0 Programmer's Reference
Eric A. Meyer / McGraw-Hill Osborne Media / 2001-03-20 / USD 19.99
The most authoritative quick reference available for CSS programmers. This handy resource gives you programming essentials at your fingertips, including all the new tags and features in CSS 2.0. You'l......一起来看看 《Cascading Style Sheets 2.0 Programmer's Reference》 这本书的介绍吧!