一、概述
前两篇文章中讲述了全部匹配和直接匹配两种交换机Exchange的类型,这篇文章讲述第三种模糊匹配Topic类型的交换机。
Topic类型的交换机,支持路由规则routingKey模糊匹配,匹配符号有‘#’全部一个或多个单词,‘*’一个单词。
示例:假设我们有两条队列,队列的绑定规则不确定,只有部分是确定的,也就是我们会接收包含这确定路由规则的信息。
实现方式:使用Topic类型的交换机,定义路由规则带有匹配符号‘#’或者‘’,如图,为了更好的说明‘’和‘#’之间的关系,我们定义如下四个队列分别绑定四种绑定规则com.chen.# #.com.chen com.chen.和.com.chen 。预期功能,当传入消息绑定com.chen.me时,能被13消费者收到,当传入消息绑定me.com.chen时,能被24消费者收到,当传入消息绑定com.chen.its.me时,能被消费者1收到,当传入消息绑定its.me.com.chen时,能被2消费者收到。
二、源代码
与前面两篇相同,先写生产者,创建Topic类型的交换机,发送四条消息,带有上述四个routingKey
1 | package com.cn.chenxyt.mq; |
编写消费者1代码,由于我们要先启动消费者,所以消费者里也创建一个交换机,(生产者即可不用创建),新建一个随机队列,绑定com.chen.#路由规则。
1 | package com.cn.chenxyt.mq; |
新建消费者2,与消费者1类似,交换机只要创建一次即可,这里不保证哪个先启动,所以都声明了交换机。新建随机队列,绑定路由规则#.com.chen
1 | package com.cn.chenxyt.mq; |
新建消费者3,绑定路由规则com.chen.*
1 | package com.cn.chenxyt.mq; |
新建消费者4,绑定路由规则*.com.chen
1 | package com.cn.chenxyt.mq; |
分别启动消费者1234,使其处于监听状态,可以在RabbitMQ控制台看见声明了一个名为’HelloMq’类型为topic的交换机和四个随机队列
启动生产者,可以看见消费者12收到了两条消息,消费者34收到了一条消息,实际结果与开篇的预期结果吻合。
至此,topic类型的交换机功能就实现了。