有奖捉虫:办公协同&微信生态&物联网文档专题 HOT
本文主要介绍了在使用 TDMQ RabbitMQ 版中常见的名词及解释说明。

Binding

RabbitMQ 中通过 Binding 将 Exchange 与 Queue 关联起来,这样 RabbitMQ 就知道如何正确地将消息路由到指定的 Queue了。

Binding key

在绑定(Binding)Exchange 与 Queue 的同时,一般会指定一个 binding key;消费者将消息发送给 Exchange 时,一般会指定一个 routing key;当 binding key 与 routing key 相匹配时,消息将会被路由到对应的 Queue 中。
在绑定多个 Queue 到同一个 Exchange 的时候,这些 Binding 允许使用相同的 binding key。
binding key 并不是在所有情况下都生效,它依赖于 Exchange Type,例如 fanout 类型的 Exchange 就会无视 binding key,而是将消息路由到所有绑定到该 Exchange 的 Queue。

Channel

在客户端的每个物理 TCP 连接里,可建立多个 Channel,每个 Channel 代表一个会话任务。

Connection

TCP 连接,生产者或消费者与 TDMQ RabbitMQ 版间的物理 TCP 连接。

Exchange

生产者将消息发送到 Exchange,由 Exchange 将消息路由到一个或多个 Queue 中(或者丢弃)。Exchange 根据消息的属性或内容路由消息。

Exchange Types

RabbitMQ 常用的 Exchange Type 有 fanout、direct、topic 、header 等。
Fanout:fanout 类型的 Exchange 会把所有发送到该 Exchange 的消息路由到所有与它绑定的 Queue 中。
Direct:Direct 类型的 Exchange 会把消息路由到那些 binding key 与 routing key 完全匹配的 Queue 中。
Topic:该类型与 direct 类型相似,Topic 类型 Exchange 支持多条件匹配和模糊匹配,即使用 Routing Key 模式匹配和字符串比较的方式将消息路由至与其绑定的 Queue 中。
Header:与 Routing Key 无关,匹配机制是匹配消息中的 Headers 属性信息。在绑定 Queue 与 Headers Exchange 之前声明一个 map 键值对,通过这个map 对象实现 Queue 和 Exchange 的绑定。当消息发送到 RabbitMQ 时会取到该消息的 Headers 与 Exchange 绑定时指定的键值对进行匹配;如果完全匹配则消息会路由到该队列,否则不会路由到该队列。

Message acknowledgment

消息回执,消费者在消费完消息后发送一个回执给 RabbitMQ,RabbitMQ 收到回执后才将消息从队列中删除,如果没有收到回执并检测到消费者的 RabbitMQ 连接断开,那么会将该消息发送给其他消费者进行处理。

Message durability

消息持久化,即 RabbitMQ 服务重启的情况下,也不会丢失消息,我们可以将 Queue 与 Message 都设置为(durable),这样可以保证绝大部分情况下我们的 RabbitMQ 消息不会丢失。

Prefetch count

消费者在开启 acknowledge 的情况下,对接收到的消息可以根据业务的需要异步对消息进行确认,prefetch 允许为每个 consumer 指定最大的 unacked messages 数目。例如:设置prefetchCount=10,则 Queue 每次给每个消费者(假设一共2个AB)发送10条消息,消费者无需马上回应,消费者将10条消息缓存本地客户端;当一个消费者处理完1条消息后 Queue 会再给该消费者发送一条消息。如果两个消费者都没有回复任何一条 ack,则 queue 就不会继续发送消息。

Queue

Queue(队列)是 RabbitMQ 的内部对象,用于存储消息。每个消息都会被投入到一个或多个 Queue 里。

Routing key

生产者在将消息发送到 Exchange 的时候,一般会指定一个 routing key,来指定这个消息的路由规则,而这个 routing key 需要与 Exchange Type 及 binding key 联合使用才能最终生效。
在 Exchange Type 与 binding key 固定的情况下(在正常使用时一般这些内容都是固定配置好的),我们的生产者就可以在发送消息给 Exchange 时,通过指定 routing key 来决定消息流向哪里。

Vhost

虚拟主机(Virtual Host,Vhost),用作逻辑隔离,分别管理各自的 Exchange、Queue 和 Binding,使得应用安全的运行在不同的 Vhost 实例上,相互之间不会干扰。一个实例下可以有多个 Vhost,一个 Vhost 里面可以有若干个 Exchange 和 Queue。生产者和消费者连接消息队列 RabbitMQ 版需要指定一个 Vhost。
?
?
?
?
?
?


http://www.vxiaotou.com