RabbitMQ的三种模式-----主题模式(Topic)
作者:互联网
主题模式(Topic):
任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue
上
1:简述
如上图所示
此类交换器使得来自不同的源头的消息可以到达一个对列,其实说的更明白一点就是模 糊匹配的意思,例如:上图中红色对列的routekey为usa.#,#代表匹配任意字符,但是 要想消息能到达此对列,usa.必须匹配后面的#好可以随意。图中usa.news usa.weather,都能找到红色队列,符号 # 匹配一个或多个词,符号 * 匹配不多不少一个 词。因此 usa.# 能够匹配到 usa.news.XXX ,但是 usa.* 只会匹配到 usa.XXX 。 注: 交换器说到底是一个名称与队列绑定的列表。当消息发布到交换器时,实际上是由你所 连接的信道,将消息路由键同交换器上绑定的列表进行比较,后路由消息。
任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的 Queue上
1.这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一 个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的 队列。
2.这种模式需要RouteKey,也许要提前绑定Exchange与Queue。
3.在进行绑定时,要提供一个该队列关心的主题,如“#.log.#”表示该队列关心所有涉及 log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。
4.“#”表示0个或若干个关键字,“”表示一个关键字。如“log.”能与“log.warn”匹配,无法 与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。
5.同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息 .
2:创建队列与绑定
(1):新建一个交换器,注意要与fanout模式区分开,类型选 topic,我们给这个新建的交换器取名wchtopic
(2):绑定交换器和队列,注意添加匹配规则
i:队列wchtest匹配以 wch.开头的routing key.
ii:队列test1匹配以 .test1结尾的routing key.
\
iii:队列test2 匹配routing key为 test2.log的。
添加绑定队列后的效果如下:
3:代码实现
代码参考:https://gitee.com/WChengHe/RabbitmqDemo.git
代码中pom文件、配置文件及启动类参考上一篇:https://blog.csdn.net/qq_22596931/article/details/89329024
测试类TopicTest.java代码:
package com.wch.demo.topic;
import com.wch.demo.DemoApplication;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class)
public class TopicTest {
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSendTopic1(){
rabbitTemplate.convertAndSend("wchtopic","wch.key","这是wch.#规则的消息");
}
@Test
public void testSendTopic2(){
rabbitTemplate.convertAndSend("wchtopic","key.test1","这是#.test1规则的消息");
}
@Test
public void testSendTopic3(){
rabbitTemplate.convertAndSend("wchtopic","test2.log","这是test2.log规则的消息");
}
}
运行效果:
源代码:https://gitee.com/WChengHe/RabbitmqDemo.git
标签:交换器,匹配,log,usa,队列,RabbitMQ,Topic,模式,import 来源: https://blog.csdn.net/qq_22596931/article/details/89329049