了解消息中间件RabbitMQ

1 RabbitMQ 简介
1.1 消息队列中间件简介
    
    消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量
削锋等问题实现高性能,高可用,可伸缩和最终一致性 [ 架构 ] 使用较多的消息队列有
ActiveMQ RabbitMQ ZeroMQ Kafka MetaMQ RocketMQ
以下介绍消息队列在实际应用中常用的使用场景:异步处理,应用解耦,流量削锋和消
息通讯四个场景
1.2 什么是 RabbitMQ
    RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。
AMQP Advanced Message Queue ,高级消息队列协议。它是应用层协议的一个开放
标准,为面向消息的中间件设计,基于此协议的客户端与消息中间件可传递消息,并不
受产品、开发语言等条件的限制。
RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展
性、高可用性等方面表现不俗。具体特点包括:
1.可靠性(Reliability
RabbitMQ 使用一些机制来保证可靠性,如持久化、传输确认、发布确认。
2.灵活的路由(Flexible Routing)
在消息进入队列之前,通过 Exchange 来路由消息的。对于典型的路由功能, RabbitMQ
已经提供了一些内置的 Exchange 来实现。针对更复杂的路由功能,可以将多个
Exchange 绑定在一起,也通过插件机制实现自己的 Exchange
3.消息集群(Clustering
多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker
4.高可用(Highly Available Queues
队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列仍然可用。
5.多种协议(Multi-protocol
RabbitMQ 支持多种消息队列协议,比如 STOMP MQTT 等等。
6.多语言客户端(Many Clients
RabbitMQ 几乎支持所有常用语言,比如 Java .NET Ruby 等等。
7.管理界面(Management UI
RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方
面。
8.跟踪机制(Tracing)
如果消息异常, RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么。
9.插件机制(Plugin System
RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件。

 

1.3.2 主要概念
RabbitMQ Server : 也叫 broker server ,它是一种传输服务。 他的角色就是维护一条
Producer Consumer 的路线,保证数据能够按照指定的方式进行传输。
Producer : 消息生产者,如图 A B C ,数据的发送方。消息生产者连接 RabbitMQ
务器然后将消息投递到 Exchange
Consumer :消息消费者,如图 1 2 3 ,数据的接收方。消息消费者订阅队列,
RabbitMQ Queue 中的消息发送到消息消费者。
Exchange :生产者将消息发送到 Exchange (交换器),由 Exchange 将消息路由到一个
或多个 Queue 中(或者丢弃)。 Exchange 并不存储消息。 RabbitMQ 中的 Exchange
direct fanout topic headers 四种类型,每种类型对应不同的路由规则。
Queue :(队列)是 RabbitMQ 的内部对象,用于存储消息。消息消费者就是通过订阅
队列来获取消息的, RabbitMQ 中的消息都只能存储在 Queue 中,生产者生产消息并最终
投递到 Queue 中,消费者可以从 Queue 中获取消息并消费。多个消费者可以订阅同一个
Queue ,这时 Queue 中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者
都收到所有的消息并处理。
RoutingKey :生产者在将消息发送给 Exchange 的时候,一般会指定一个 routing key
来指定这个消息的路由规则,而这个 routing key 需要与 Exchange Type binding key
合使用才能最终生效。在 Exchange Type binding key 固定的情况下(在正常使用时一
般这些内容都是固定配置好的),我们的生产者就可以在发送消息给 Exchange 时,通过
指定 routing key 来决定消息流向哪里。 RabbitMQ routing key 设定的长度限制为 255
bytes
Connection : (连接): Producer Consumer 都是通过 TCP 连接到 RabbitMQ Server
的。以后我们可以看到,程序的起始处就是建立这个 TCP 连接。
Channels : (信道):它建立在上述的 TCP 连接中。数据流动都是在 Channel 中进行
的。也就是说,一般情况是程序起始建立 TCP 连接,第二步就是建立这个 Channel
VirtualHost :权限控制的基本单位,一个 VirtualHost 里面有若干 Exchange
MessageQueue ,以及指定被哪些 user 使用

Guess you like

Origin blog.csdn.net/qq_39772439/article/details/121246768