RabbitMQ的幾個基礎概念【DaemonCoder】

RabbitMQ的几个基础概念【DaemonCoder】

Broker、生产者、消费者

RabbitMQ 作为消息中间件,最基本的功能就是接受生产者发来的消息,保存起来,并最终交给消费者。RabbitMQ 和 Redis 等其他常见的服务器程序类似,他也是一个服务器程序,接收发消息、保存消息、交付消息,生产者和消费者作为客户端程序连接服务器程序,生产者向服务器程序写消息数据,消息者则从服务器程序中读取消息数据。RabbitMQ 运行在服务器端的这部分程序,叫做 broker。

生产者发送消息命令 Basic.Publish

消费者读取消息命令 Basic.Consume Basic.Get

Queue:队列

队列是 RabbitMQ 的内部对象,用于存储消息。多个消费者可以订阅同一个队列,这时队列的消息会被分摊(Round-Robin,即轮询)给多个消费者,而不是每个消费者都收到所有的消息,RabbitMQ不支持队列层面的广播消费。

Exchange:交换器

生产者将消息发送到 Exchange,由交换器将消息路由到一个或者多个队列中,如果路由不到,返回给生产者或者直接丢弃。

RabbitMQ中交换器有四种类型:fanout、direct、topic、headers,下文会介绍这四种交换器的工作方式和区别。

RoutingKey:路由键

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

Binding:绑定

RabbitMQ 中通过指定绑定键(BindingKey)将交换器与队列关联起来。

生产者将消息发送给交换器的时候,需要一个 RoutingKey,当 BindingKey 和 RoutingKey 相匹配的时候,消息会被路由到对应的队列中。

四种交换器类型

  • fanout:会把消息路由到所有与此交换器绑定的队列中。
  • direct: 会把消息路由到 BindingKey 和 RoutingKey 完全匹配的队列中。
  • topic: 和 direct 类似,会把消息路由到 BindingKey 和 RoutingKey 相匹配的队列中,但是支持模糊匹配。约定 RoutingKey 和 BindingKey 都是以点(.)分隔的字符串,分隔开的每一段称为一个单词。通配符 * 可以匹配一个单词,# 可以匹配多个或0个单词。如:com.rabbitmq.client 可以匹配 *.rabbitmq.* 、*.*.client 和 com.#
  • headers: 这种类型不是根据路由键的匹配规则来路由的,而是根据发送消息内容中的 headers 属性进行匹配。headers 和绑定键完全匹配时才会路由到对应的队列。

Connection:连接

消息者或生产者与 RabbitMQ Broker 建立的TCP连接。

Channel:信道

信道是建立在连接之上的虚拟连接,多个信道可以复用 TCP 连接。每一个信道会有一个唯一的ID,RabbitMQ 处理的每条 AMQP 指令都是通过信道完成。


分享到:


相關文章: