纵横研究院BPM&MQ中间件专题社区

RabbitMQ 相关基本概念

2019-04-14  本文已影响0人  查无此人_chazz

RabbitMQ优异性

RabbitMQ发展到今天,被越来越多的人认可,这和它在易用性、扩展性、可靠性和高可用性等方面的卓著表现是分不开的。RabbitMQ的具体特点可以概括为以下几点。

  • 可靠性:RabbitMQ使用一些机制来保证可靠性,如持久化、传输确认及发布确认等。
  • 灵活的路由:在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起,也可以通过插件机制来实现自己的交换器。
  • 扩展性:多个RabbitMQ节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
  • 高可用性:队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。
  • 多种协议:RabbitMQ除了原生支持AMQP协议,还支持STOMP、MQTT等多种消息中间件协议。
  • 多语言客户端:RabbitMQ几乎支持所有常用语言,比如Java、Python、Ruby、PHP、C#、JavaScript等。
  • 管理界面:RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
  • 插件机制:RabbitMQ提供了许多插件,以实现从多方面进行扩展,当然也可以编写自己的插件。

RabbitMQ常见名词解释

Broker: 服务节点。如下图,Broker实际上是一个消息的中转站,负责接收、存储和转发消息

RabbitMQ-Broker

Queue: 队列。RabbitMQ的内部对象,用于存储消息。RabbitMQ的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。但是当多个消费者订阅了同一个队列后,此时队列中的消息会被分摊(轮询)给多个消费者进行处理,而非每个消费者都会收到所有的消息。所以当有广播消费的需求时,建议在交换器层级进行处理,生产多个队列,而不是在队列层级做广播处理。

Exchange: 交换器。生产者将消息发送到Exchange(交换器,通常也可以用大写的“X”来表示),由交换器将消息路由到一个或者多个队列中。如果路由不到,或许会返回给生产者,或许直接丢弃。交换器由生产者声明,并设置相关属性(如交换机类型,是否持久化等)。

RoutingKey: 路由键。生产者将消息发给交换器的时候,消息一般会携带一个RoutingKey,用来指定这个消息的路由规则,而这个Routing Key需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效。在交换器类型和绑定键(BindingKey)固定的情况下,生产者可以在发送消息给交换器时,通过指定RoutingKey来决定消息流向哪里。

BindingKey: 绑定键。当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中。BindingKey并不是在所有的情况下都生效,它依赖于交换器类型,比如fanout类型的交换器就会无视BindingKey,而是将消息路由到所有绑定到该交换器的队列中。

Binding: 绑定。RabbitMQ中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样RabbitMQ就知道如何正确地将消息路由到队列了。

Connection: 连接。无论是消息的生产者还是消费者,都需要和RabbitMQ Broker建立起连接来,这个连接就是一条TCP连接。

Channel: 信道。信道可以看作是连接的子集,是一个建立在Connection上的虚拟连接。客户端在建立起Connection后可以创建一个AMQP信道,每个信道都会被指派一个唯一的ID,每条AMQP指令都是通过信道完成处理的。信道主要是用来解决TCP连接创建和销毁太过耗费资源的问题,当出现请求高峰的时候,使用信道实现对TCP连接的复用可以有效降低性能瓶颈的到来。

RabbitMQ交换器类型

RabbitMQ交换器有以下几种:

RabbitMQ消息交换方法

生产者生产消息

消费者消费消息

上一篇 下一篇

猜你喜欢

热点阅读