RabbitMQ-topic主题模式

RabbitMQ-topic主题模式


     Topic: 所有符合routingKey(此时可以是一个表达式)的routingKey所绑定的队列可以接收消息;

     发送到topic类型交换机的消息的routing_key不能随便设置–它必须是多个单词组成,用点分割。单词可以是任意的,但它们通常指定连接到该消息的某些功能。例如:“stock.usd.nyse”,“nyse.vmw”,“quick.orange.rabbit”。路由关键字可包含任意多的单词,但最高限制是255字节。

     绑定的关键字必须有相同的格式。topic交换机和direct交换的逻辑是相似的–拥有特定的路由关键字的消息将被发送到所有匹配关键字的队列。然而,绑定关键字有两个特殊的情况:
(1)* (星号) 可以代替一个完整的单词.
(2)# (井号) 可以代替零个或多个单词.

举例说明:
RabbitMQ-topic主题模式_第1张图片
     在这个例子中,我们将发送描述动物的消息。这些消息的路由关键字由三个单词(两个点)组成。路由关键字的第一个单词描述速度,第二个描述颜色,第三个描述物种:“..”。
     建立三个绑定: Q1绑定关键字".orange." ,Q2绑定关键字"..rabbit"和"lazy.#".
这些绑定可以概括为:
• Q1对所有橙色的动物感兴趣。
• Q2希望接收所有关于兔子和一切有关懒惰的动物的消息。

     现在发送几个不同的routing_key消息:
(1)“quick.orange.rabbit”的消息将被传递到两个队列。
(2)“lazy.orange.elephant”消息也被发送到两个队列。
(3)“quick.orange.fox”消息只会到第一队列,
(4)“lazy.brown.fox”消息只会到第二个。
(5)“lazy.pink.rabbit”消息只会被发送给第二队列一次,即使它匹配两个绑定。
(6)“quick.brown.fox”消息不匹配任何绑定,所以它会被丢弃。
(7)“orange”或“quick.orange.male.rabbit”,这些消息将不会匹配任何绑定,将会被丢弃。
(8)“lazy.orange.male.rabbit”消息即使有四个词,但匹配最后一个绑定,将被发送到
第二个队列(因为第一个绑定使用的都是*,只能匹配一个完整的单词,而第二个绑定后面是#,可以匹配零个或多个完整的单词).

     当队列以‘#’作为绑定关键字,该队列将会接收所有的消息,和fanout一样,忽略消息的绑定关键字。
     当绑定关键字中没有‘*’和‘#’时,topic类型交换机就和direct类型交换机一样。

你可能感兴趣的:(RabbitMq)