RabbitMQ(五) : Topic 交换器(规则匹配)

Topic交换器类型与Direct类似,都是通过路由键来匹配消息队列,不同之处是Direct是通过完全匹配路由键的名称对应,而Topic类型支持规则匹配,也即支持通配符的方式。

下面通过不同的服务对不同级别的日志发送到不同规则的消息队列RabbitMQ(五) : Topic 交换器(规则匹配)_第1张图片

一、创建接收者(消费者)项目

RabbitMQ(五) : Topic 交换器(规则匹配)_第2张图片

   1.设置配置文件application.properties

           设置相应的RabbitMQ的服务器和相应的交换器名称,队列名称,如下图

           这里可以不配置路由键,因为用的是规则匹配,一般配置好了,不会再改,直接配置在注解上就可以。

RabbitMQ(五) : Topic 交换器(规则匹配)_第3张图片

2.创建日志级别的信息接收者,以匹配所有的日志为例。

 可以参考上一个例子(Direct交换类型),这里的路由键使用的是规则匹配,例如不论是哪个服务产生的哪种级别的日志都要求被接收,设置的路由键格式如: *.log.*。那么在发送消息时,设置的路由键符合这个格式即可。

LogReceiver.java

RabbitMQ(五) : Topic 交换器(规则匹配)_第4张图片

需要单独接收的2个日志级别,Error、Info 的类跟LogReceiver.java类似,只需要将相应的队列名称和路由键改掉即可。

队列名称就是配置文件里相应的参数,路由键分别为: *.log.error、*.log.info。

二、 设置消息发送者(生产者)项目

RabbitMQ(五) : Topic 交换器(规则匹配)_第5张图片

1.设置配置文件application.properties

这里也不要配置路由键,因为使用的规则匹配,只要在使用的时候符合定义的规则即可,而在实际使用中,可能会根据不同的功能定义不同的路由键,这就会导致路由键比较多了,也就不太合适在这里配置了。

RabbitMQ(五) : Topic 交换器(规则匹配)_第6张图片

2.创建发送者(以用户服务为例)

   UserSender.java

RabbitMQ(五) : Topic 交换器(规则匹配)_第7张图片

这里发送了4种级别的日志消息,并且每种消息对应相应的路由键,理论上控制台会发出6条语句,

4条是all-->开头,一条以info-->开头,一条以error-->开头。

这里先直接给出结果。

RabbitMQ(五) : Topic 交换器(规则匹配)_第8张图片

  产品服务和订单服务的发送者和用户服务类似,只要将相应的路由键修改成相应的匹配规则即可,

例如产品的路由键规则为  product.logo.info 、product.logo.error等。

三、测试类

RabbitMQ(五) : Topic 交换器(规则匹配)_第9张图片

订单服务、产品服务的测试类类似,运行的结果如下。

RabbitMQ(五) : Topic 交换器(规则匹配)_第10张图片

你可能感兴趣的:(微服务)