SpringBoot---RabbitMQ消息队列_3(Routing模式、通配符模式)
Routing模式则可以指定具体的接收队列。
1、在服务类中,编写路由模式消息的接收代码
@Service
public class MessageService {
//路由模式消息接收,处理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); }
//路由模式消息接收,处理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 routingConsumeAll(String message){ String msg="接收到info、error、warning等级别的日志消息:"; System.out.println(msg+message); } }
2、在测试类中添加发送消息的代码,在函数中指定接收的消息队列。
@Test public void routingPublisher(){ rabbitTemplate.convertAndSend("routing_exchange","error_routing_key","routing send error message"); System.out.println("消息发送成功~"); }
3、完成测试
通配符模式
路由模式需要指定接收队列的名称,而统配模式可以认为是路由模式的扩展,支持队列名称的匹配模式。
1、在Service类中添加通配符模式的接收方法。
@Service public class MessageService {
//通配符模式消息接收,进行邮件业务订阅处理 @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); }
//通配符模式消息接收,进行短信业务订阅处理 @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); } }
2、在测试类中添加发送消息的代码,在函数中指定接收的消息队列。
@Test
public void topicPublisher(){
rabbitTemplate.convertAndSend("topic_exchange","info.email.sms","topic send email and sms message");
}
3、完成测试