学科分类
目录
Spring Boot开发

Topics(通配符模式)

下面,以不同用户对邮件和短信的订阅需求这一场景为例,使用基于注解的方式来实现Topics通配符模式的整合讲解。

(1)使用基于注解的方式定制消息组件和消息消费者

打开进行消息接收和处理的业务类RabbitMQService,在该类中使用@RabbitListener注解及其相关属性定制Topics通配符模式的消息组件,并模拟编写消息消费者接收的方法,示例代码如下。

/**
 *  3.1、通配符模式消息接收,进行邮件业务订阅处理
*/
@RabbitListener(bindings =@QueueBinding(value = 
@Queue("topic_queue_email"),exchange = 
@Exchange(value = "topic_exchange",type = "topic"),
key = "info.#.email.#"))
public void topicConsumerEmail(String message) {
    System.out.println("接收到邮件订阅需求处理消息: "+message);
}
/**
 *  3.2、通配符模式消息接收,进行短信业务订阅处理
*/
@RabbitListener(bindings =@QueueBinding(value = 
@Queue("topic_queue_sms"),exchange = 
@Exchange(value = "topic_exchange",type = "topic"),
key = "info.#.sms.#"))
public void topicConsumerSms(String message) {
    System.out.println("接收到短信订阅需求处理消息: "+message);
}

上述代码中,在消息业务处理类RabbitMQService中新增了两个处理Topics通配符模式的消息消费者方法,在两个消费者方法上使用@RabbitListener注解及其相关属性定制了通配符模式下的消息组件。从上述示例可以看出,Topics通配符模式下注解使用方式与Routing路由模式的使用基本一样,主要是将交换器类型type修改为了topic,还分别使用通配符的样式指定路由键routingKey。

(2)消息发送者发送消息

在项目测试类Chapter08ApplicationTests中使用RabbitTemplate模板类实现Routing路由模式下的消息发送,示例代码如下。

//    3、Topcis工作模式消息发送端
@Test
public void topicPublisher() {
    // 1、只发送邮件订阅用户消息
    rabbitTemplate.convertAndSend("topic_exchange","info.email",
                                  "topics send  email message");
    // 2、只发送短信订阅用户消息
//    rabbitTemplate.convertAndSend("topic_exchange","info.sms",
//                                "topics send  sms message");
    // 3、发送同时订阅邮件和短信的用户消息
//    rabbitTemplate.convertAndSend("topic_exchange","info.email.sms",
//                                "topics send  email and sms message");
}

上述代码中,使用RabbitTemplate模板工具类的convertAndSend(String exchange, String routingKey, Object object)方法针对不同的订阅用户需求分别发送消息。需要注意的是,在消息发送时,必须根据具体需求和之前定制的路由键通配符来设置方法参数中具体的路由键,例如infor.email会匹配info.#.email.#并路由到邮件业务处理方法中,infor.sms会匹配info.#.sms.#并路由到短信业务处理方法中,infor.email.sms会同时匹配info.#.email.#和info.#.email.#并路由到邮件和短信两种业务处理方法中。

执行测试方法topicPublisher(),先进行步骤1中邮件订阅用户的消息发送,控制台效果如图1所示。

图1 消息发送执行效果

从图1可以看出,消息发送端的测试方法启动完成时在控制台打印出了处理邮件订阅用户消息消费者获取的消息,这与测试需求相符。

将测试方法topicPublisher()中的步骤1调用方法进行注释,打开步骤2中只进行短信订阅用户的消息发送方法,并再次启动该测试方法,控制台效果如图2所示。

图2 消息发送执行效果

从图2可以看出,消息发送端的测试方法启动完成时在控制台打印出处理短信订阅用户消息消费者获取的消息,这与测试需求相符。

将测试方法topicPublisher()中的步骤2调用方法进行注释,打开步骤3中同时进行邮件和短信订阅用户的消息发送方法,并再次启动该测试方法,控制台效果如图3所示。

图3 消息发送执行效果

从图3可以看出,消息发送端的测试方法启动完成时在控制台同时打印出了处理邮件和短信订阅用户消息消费者获取的消息,这与测试需求相符。

与此同时,还可以通过RabbitMQ可视化管理页面查看自动定制的Topics通配符模式的消息组件,如图4所示。

图4 Topics通配符模式定制组件效果

从图4可以看出,使用基于注解的方式自动生成了Topics通配符模式下的消息组件,并进行了自动绑定。

点击此处
隐藏目录