RabbitMQ (消息队列)专题学习06 Topic

本文介绍了RabbitMQ中的Topic Exchange,用于解决direct exchange在消息分发上的局限性。通过使用Topic Exchange,可以根据多个标准分发消息。文中详细讲解了Topic Exchange的工作原理,包括如何使用*和#作为通配符进行路由,并通过Java客户端代码示例展示了如何在日志系统中应用Topic Exchange。通过测试案例,展示了不同绑定键的匹配规则及其效果,强调了其灵活性和应用场景。
摘要由CSDN通过智能技术生成

(使用Java客户端)

一、概述

在路由消息分发的学习中,对日志记录系统做了改进,使用direct exchange来替换fanout exchange进行消息分发,可以使日志系统有了直接、并且可以有选择的接收消息。

尽管使用direct exchange改进了系统,但是它仍然有局限性,就是不能根据多个标准来分发消息。

在日志系统中,我们也许想订阅的不仅仅是基于日志消息的严重程度,而且可能是基于日志消息的发送源。

这将给我们带来很多的灵活,我可能想坚挺的错误来自"cron"的消息源,而不是来自"kern"消息源发送的所有消息。

为了按照上述的要求改进我们的日志系统,所以我们需要学习一种更为复杂的exchange.

二、实现步骤

2.1、Topic exchange

消息被发送到一个topic exchange不能使用一个随意的routingKey,而它必须是一个由点号(.)隔开的单词列表,这些单词可以使任何字符,但是它们通常有一些特性用来指定分发的消息,一些有效的routingKey的例子,比如"stock.mus.nyse","nyse.vmw","quick.orange.rabbit",可以用自己喜欢的许多单词来作为routingKey,但是最多不能超过255个字符。

绑定Key必须是相同的形式,topic exchange的逻辑绑定类似与一个direct exchange的丁丁,一个被发送的消息带着一个特定的routingKey被传递到所有与之匹配的routingKey的queues中,但是topic exchange有两个特殊的情况。

1、*(星号)可以代替一个确切的词

2、#(井号)可以替换零个或者多个词

以下是一个最容易的例子的说明:

-1

说明:

在这个实例中,要发送描述动物的所有消息,该消息将routingKey包含三个单词,两个点号,在routingKey的第一部分描述速度、第二部描述颜色、第三部分描述种类。格式为:"<speed>.<colour>.<species>"。

创建了三个绑定,Q1绑定key为“*.orange.*”,Q2队列的绑定key为"*.*.rabbit"和"lazy.#".

这些绑定可以概括为:

>Q1是一对所有orange的舞动感兴趣的队列。

>Q2项坚挺关于兔子和懒惰的动物一切消息的队列。

若一个消息绑定的key设置为"quick.orange.rabbit"将被发送到所有队列,因为它匹配所有消息队列的绑定关系,消息绑定key为"lazy.orange.elephant"也将被发送到所有的消息队列中,另外一方面,若某条消息绑定key为"quick.orange.fox"仅仅将被发送到Q1中,"lazy.pink.rabbit"这样的绑定key仅仅只有一次被传递到Q2中,即使它符合匹配两个绑定,像"quick.brown.fox"不匹配任何绑定的队列,这些消息将会被丢弃。

如果我们打破上述的这些规则发送包含一个单词或者四个单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来生做一个苦行僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值