学科分类
目录
Spring Boot开发

Routing(路由模式)

下面,以不同级别日志信息采集处理这一场景为例,使用基于注解的方式来实现Routing路由模式的整合讲解。

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

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

/**
 *  2.1、路由模式消息接收,处理error级别日志信息
*/
@RabbitListener(bindings =@QueueBinding(value = 
@Queue("routing_queue_error"),exchange = 
@Exchange(value = "routing_exchange",type = "direct"),
key = "error_routing_key"))
public void routingConsumerError(String message) {
    System.out.println("接收到error级别日志消息: "+message);
}
/**
 *  2.2、路由模式消息接收,处理info、error、warning级别日志信息
*/
@RabbitListener(bindings =@QueueBinding(value = 
@Queue("routing_queue_all"),exchange = 
@Exchange(value = "routing_exchange",type = "direct"),
key = {"error_routing_key","info_routing_key","warning_routing_key"}))
public void routingConsumerAll(String message) {
    System.out.println("接收到info、error、warning等级别日志消息: "+message);
}

上述代码中,在消息业务处理类RabbitMQService中新增了两个用来处理Routing路由模式的消息消费者方法,在两个消费者方法上使用@RabbitListener注解及其相关属性定制了路由模式下的消息服务组件。从示例代码可以看出,与发布订阅模式下的注解相比,Routing路由模式下的交换器类型type修改为了direct,还必须分别指定路由键routingKey(每个消息队列可以映射多个路由键,而在Spring Boot 1.X版本中,@QueueBinding中的key属性只接收Spring类型而不接收Spring[]类型)。

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

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

//    2、Routing工作模式消息发送端
@Test
public void routingPublisher() {
    rabbitTemplate.convertAndSend("routing_exchange","error_routing_key",
"routing send  error message");
}

上述代码中,使用RabbitTemplate模板工具类的convertAndSend(String exchange, String routingKey, Object object)方法进行消息发送,在Routing工作模式下发送消息时,必须指定路由键参数,该参数要与消息队列映射的路由键保持一致,否则发送的消息将会丢失。本次示例中使用的是error_routing_key路由键,根据定制规则,编写的两个消息消费者方法应该都可以正常接收并消费该发送端发送的消息。

直接执行上述消息发送的测试方法routingPublisher(),控制台效果如图1所示。

图1 消息发送执行效果

如图1所示,消息发送端的测试方法启动完成后在控制台打印出消息消费者获取的消息,两个消息消费者方法都对error_routing_key路由键的error级别日志信息进行了消费。

将测试方法routingPublisher()中进行消息发送的参数进行修改,调整发送info级别的日志信息(注意同时修改info_routing_key路由键),再次启动该测试方法,查看控制台执行效果,如图2所示。

图2 消息发送执行效果

如图2所示,在消息发送端的测试方法中,使用info_routing_key路由键发送info级别的日志信息时,只有配置映射info_routing_key路由键的消息消费者方法才能够进行消息消费。

通过RabbitMQ可视化管理页面查看自动定制的Routing路由模式的消息组件,如图3所示。

图3 Routing路由模式定制组件效果

从图3可以看出,使用基于注解的方式同样自动生成了Routing路由模式下的消息组件,并进行了自动绑定。

点击此处
隐藏目录