紧接上一篇:https://blog.csdn.net/qq_36357242/article/details/107688368
本篇介绍通配符模式
通配符模式
通配符模式是可以根据路由键匹配规则
选择性给多个消费者发送消息的模式,它包含一个生产者、两个消费者、两个队列和一个交换机。两个消费者同时绑定到不同的队列上去,两个队列通过路由键匹配规则
绑定到交换机上去,生产者发送消息到交换机,交换机通过路由键匹配规则
转发到不同队列,队列绑定的消费者接收并消费消息。
*
:只能匹配一个单词;#
:可以匹配零个或多个单词。
声明交换机和队列
//声明通配符模式交换机
@Bean
public TopicExchange topic() {
return new TopicExchange("exchange.topic");
}
//声明俩个通配符模式队列
@Bean
public Queue topicQueue1() {
return new Queue("topic1");//队列一
}
@Bean
public Queue topicQueue2() {
return new Queue("topic2");//队列二
}
//将队列队列一绑定到交换机
@Bean
public Binding topicBinding1a(TopicExchange topic, Queue topicQueue1) {
return BindingBuilder.bind(topicQueue1).to(topic).with("*.orange.*");
}
@Bean
public Binding topicBinding1b(TopicExchange topic, Queue topicQueue1) {
return BindingBuilder.bind(topicQueue1).to(topic).with("*.*.rabbit");
}
//将队列队列二绑定到交换机
@Bean
public Binding topicBinding2a(TopicExchange topic, Queue topicQueue2) {
return BindingBuilder.bind(topicQueue2).to(topic).with("lazy.#");
}
创建生产者(发送者)
//创建消息发送者
public void sendToTopic(String index) {
String context = "通配符模式发送的消息";
System.out.println("通配符模式发送者: " + context);
this.rabbitTemplate.convertAndSend("exchange.topic", index,context+":"+index);
}
创建消费者(接收者)
@RabbitListener(queues = "topic1")
@RabbitHandler
public void process8(String topic) {
System.err.println("通配符模式 消费者1: " + topic);
}
@RabbitListener(queues = "topic2")
@RabbitHandler
public void process9(String topic) {
System.out.println("通配符模式 消费者2: " + topic);
}
运行
//通配符模式
@Test
public void contextLoads5() {
senderConfig.sendToTopic("lazy.111");
senderConfig.sendToTopic("111.orange.111");
senderConfig.sendToTopic("1111.111.orange");
senderConfig.sendToTopic("1111.111.rabbit");
senderConfig.sendToTopic("1111.rabbit");
}