RabbitMQ 是轻量级的,易于在本地和云端部署。它支持多种消息传递协议。RabbitMQ 可以部署在分布式和联合配置中,以满足大规模、高可用性的要求。

https://www.rabbitmq.com/download.html

RabbitMQ 概念

RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按照这种逻辑 RabbitMQ 是一个快递站,一个快递员帮你传递快件。 RabbitMQ 与快递站的主要区别在于,它不处理快件而是接收,存储和转发消息数据。

四大核心概念
1)生产者(Producer)

产生数据发送消息的程序是生产者

2)交换机(Exchange)

交换机是 RabbitMQ 非常重要的一个部件,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定

3)队列(Queue)

队列是 RabbitMQ 内部使用的一种数据结构, 尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式

4)消费者(Consumer)

消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。 请注意生产者,消费者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。

RabbitMQ 核心部分

RabbitMQ 特性

异步消息

支持多种消息协议、消息队列、传递确认、灵活的队列路由、多种交换类型。

开发者经验

使用 Kubernetes、BOSH、Chef、Docker 和 Puppet进行部署。使用最喜欢的编程语言开发跨语言消息传递,例如:Java、.NET、PHP、Python、JavaScript、Ruby、Go等。

分布式部署

部署为集群以实现高可用性和吞吐量;跨多个可用性区域和区域 联合。

企业和云就绪

可插入的身份验证、授权,支持TLS和LDAP。轻巧且易于部署在公共云和私有云中。

工具和插件

支持持续集成、运营指标和与其他企业系统集成 的各种工具和插件。用于扩展 RabbitMQ 功能 的灵活插件方法。

管理与监控

用于管理和监视RabbitMQ 的 HTTP-API、命令行工具和 UI 。

RabbitMQ 集群

RabbitMQ一般以集群方式部署,主要提供消息的接受和发送,实现各微服务之间的消息异步。
Rabbitmq 有 3 种模式,但集群模式是 2 种

  • 单一模式:即单机情况不做集群,就单独运行一个 RabbitMQ 而已。

  • 普通模式:默认模式,以两个节点(A、B)为例来进行说明:

    • 当消息进入 A 节点的 Queue 后,Consumer 从 B 节点消费时,RabbitMQ 会在 A 和 B 之间创建临时通道进行消息传输,把 A 中的消息实体取出并经过通过交给 B 发送给 Consumer。
    • 当 A 故障后,B 就无法取到 A 节点中未消费的消息实体;如果做了消息持久化,那么得等 A 节点恢复,然后才可被消费;如果没有持久化的话,就会产生消息丢失的现象。
  • 镜像模式 :经典的 Mirror 镜像模式,保证数据不丢失:

    • 高可靠性解决方案,主要就是实现数据的同步,一般来讲是 2 - 3 个节点实现数据同步。
    • 对于 100% 数据可靠性解决方案,一般是采用 3 个节点。
    • 该模式用得最多的,并且实现非常的简单,一般互联网大厂都会构建这种镜像集群模式。
作者:Jeebiz  创建时间:2023-01-11 16:57
最后编辑:Jeebiz  更新时间:2024-11-01 10:05