关注△mikechen△,十余年BAT架构经验倾囊相授!
大家好,我是mikechen。
RabbitMQ是大型架构必备的中间件,下面我全面详解RabbitMQ@mikechen
文章来源:mikechen.cc
RabbitMQ
RabbitMQ本身是基于Erlang编写,Erlang语言天生具备分布式特性,因此RabbitMQ天然支持集群。
RabbitMQ典型的应用场景,比如:订单生成后异步发送邮件、短信等。
RabbitMQ 节点包括内存节点(RAM)、 磁盘节点(Disk, 消息持久化), 集群中至少有一个 Disk 节点。
RabbitMQ集群主要有两个作用:
1.集群是保证可靠性的一种方式,采用多节点,是数据高可靠性的有效解决方案。
2.同时可以增加节点,通过水平扩展以达到增加消息吞吐量能力的目的。
RabbitMQ原理
RabbitMQ 的运作依赖几个重要组件:
组件之间的关系:
组件 | 作用 |
Producer(生产者) | 发送消息的应用程序 |
Consumer(消费者) | 接收消息的应用程序 |
Broker | RabbitMQ 服务器本体 |
Queue(队列) | 存储消息的容器(FIFO) |
Exchange(交换机) | 接收生产者的消息,并根据规则(Routing Key + 绑定规则)把消息路由到队列 |
Binding(绑定) | Exchange 与 Queue 之间的映射规则 |
Routing Key | 消息的路由标签,用于匹配绑定规则 |
Virtual Host(vhost) | 虚拟隔离空间,一个 vhost 内可以有独立的队列、交换机、绑定 |
RabbitMQ工作流程
Producer│(msg, routing_key)▼Exchange--Binding-->Queue-->Consumer
首先,生产者发送消息到 Exchange。
然后,Exchange 决定消息走向,Exchange 根据类型和绑定规则路由消息。
- Direct:精确匹配;
- Fanout:广播;
- Topic:模糊匹配;
- Headers:头匹配;
然后,Binding 决定队列是否接收消息;
最后,Queue 保存消息,Consumer 消费。
RabbitMQ集群
RabbitMQ集群模式主要包含如下4种:
1.主备模式
主备模式:也就是主节点提供读写,备用节点不提供任何读写的,只用来实现当主节点宕机的情况下能顶上去。
如下图所示:
可通过haproxy来配置:
listen rabbitmq_clusterbind 0.0.0.0:5672# 配置TCP模式mode tcp #简单的轮询balance roundrobin # 主节点server bhz76 192.168.11.76:5672 check inter 5000 rise 2 fall 2server bhz76 192.168.11.77:5672 backup check inter 5000 rise 2 fall 2# 备用节点
2.远程模式
远程模式:就是我们可以把消息进行不同数据中心的复制工作,可以跨地域的让两个mq集群互联远距离通信和复制。
如下图所示:
远程模式,在实际应用种不太常用。
3.镜像模式
镜像模式(Mirror),就是集群里面的每个节点都会存储Queue的数据副本,在实际工作中也是用的最多。
如下图所示,一般是3个节点:
集群镜像模式,意味着每次生产消息的时候,都需要把消息内容同步给集群中的其他节点,这种方式能够保证Queue的高可用性。
一般互联网大厂都会构建这种镜像集群模式,在实际工作中也是用的最多的。
4.多活模式
这种模式也是实现异地数据复制的主流模式,模型如下图所示:
RabbitMQ部署架构采用:双中心模式(多中心),在两套或多套数据中心各部署一套RabbitMQ集群,可以避免一个集群挂掉,整个系统就挂掉了。
各个中心的RabbitMQ服务除了需要为业务提供正常的消息服务外,中心之间还需要实现部分队列消息共享。
以上