文章目录
一,252-商城业务-消息队列-Direct-Exchange
这一节的内容是实操-direct exchange的信息发送。
1,创建4个队列
- gulimall
- gulimall.news
- gulimall.emps
- gulixueyuan.news
2,exchange绑定queue
如下,分别把4个queue绑定到exchange。
最终效果如下。
3,发送消息
如下图所示,发送一条消息,发送时指定routing key
是gulimall.news
。
结果如下。
因为是direct
,所以消息只会发送给binding
和routing keys
完全匹配的队列,只发给队列gulimall.news
。
二,253-商城业务-消息队列-Fanout-Exchange
1,创建一个type为fanout的exchange
2,给这个exchange绑定几个queue
3,发送消息
给这个exchange发送消息,结果线上消息会发送给这个exchange绑定的所有queue,和routing key完全没有关系,只和binding有关系。
三,254-商城业务-消息队列-Topic-Exchange
1,创建一个topic类型的exchange
2,绑定queue
结果如下:
3,发送消息1
如上,发送的routing keys是gulimall.news,在topic类型下,根据我们定义的binding,能匹配到4个queue:
- gulimall、gulimall.news、gulimall.emps,匹配模式gulimall.#
- gulixueyuan.news,匹配模式*.news
所以这条消息会发送给4个queue。
4,发送消息2
如上图,这里有所不同的是,我们并没有明确定义这样:
- binding:topic.news
- 但是其能匹配这个binding: *.news
- 所以只会发送给queue: gulixueyuan.news。
5,topic类型的exchange
这张图片展示的是一个主题交换机(Topic Exchange),它是RabbitMQ中一种常用的交换机类型。主题交换机通过模式匹配来决定将消息路由到哪个队列。
在图片中,我们能看到四个队列(Queues)分别绑定了不同的模式(Binding Key)。这些模式都是由单词组成的,单词之间用点号"."分隔。同时,主题交换机也支持两种通配符:
#
:匹配零个或多个单词;*
:匹配一个单词。
例如,队列1绑定了"usa.#“,这意味着它将接收所有以"usa.“开头的消息;队列2绑定了”.news”,表示它将接收所有包含"news"作为最后一个单词的消息;队列3绑定了"#.weather",意味着它将接收所有以".weather"结尾的消息;队列4绑定了"europe.#",因此它将接收所有以"europe."开头的消息。
接下来,我们看几个例子:
-
当一条消息的路由键(Routing Key)为"usa.news"时:
- 队列1(绑定键为"usa.#")可以接受,因为"usa.news"满足以"usa."开头;
- 队列2(绑定键为".news")也可以接受,因为它包含了"news"作为最后一个单词;
- 队列3(绑定键为"#.weather")不能接受,因为"usa.news"没有以".weather"结尾;
- 队列4(绑定键为"europe.#")也不能接受,因为"usa.news"并没有以"europe."开头。
-
当一条消息的路由键(Routing Key)为"europe.weather"时:
- 队列1(绑定键为"usa.#")不能接受,因为"europe.weather"并不以"usa."开头;
- 队列2(绑定键为".news")可以接受,因为它包含了"weather"作为最后一个单词;
- 队列3(绑定键为"#.weather")也能接受,因为"europe.weather"是以".weather"结尾的;
- 队列4(绑定键为"europe.#")可以接受,因为"europe.weather"以"europe."开头。
总的来说,主题交换机允许你定义一系列的过滤规则,使得消息能够更灵活地被路由到合适的队列。这对于处理具有相似性的不同消息非常有用,比如上述例子中的美国新闻和欧洲天气预报。