文章目录
- 声明交换机
- 消息接收
- 消息发送
- 效果
广播交换机的特定是: 将消息交给所有绑定到交换机的队列
在广播模式下,消息发送流程是这样的:
- 1) 可以有多个队列
- 2) 每个队列都要绑定到 Exchange(交换机)
- 3) 生产者发送的消息,只能发送到交换机,交换机来决定要发给哪个队列,生产者无法决定
- 4) 广播类型的交换机会把消息发送给绑定过的所有队列
- 5) 订阅队列的消费者都能拿到消息
我们的计划是这样的:
- 创建一个交换机 test2024.fanoutExchange,类型是Fanout
- 创建两个队列 test2024.fanout.queue1 和 test2024.fanout.queue2 ,绑定到交换机 test2024.fanoutExchange
声明交换机
Spring提供了一个接口Exchange,来表示所有不同类型的交换机:
首先我们在配置类 声明处我们所需要的交换机和队列 并绑定其关系
// 声明一个广播类型的交换机/ 广播交换机特点 : 将消息交给所有绑定到交换机的队列
@Bean
public FanoutExchange testFanoutExchange() {return new FanoutExchange("test2024.fanoutExchange");
}/** 声明两个队列 和 广播交换机绑定 */
@Bean
public Queue testQueue1() {return new Queue("test2024.fanout.queue1");
}@Bean
public Queue testQueue2() { return new Queue("test2024.fanout.queue2");}@Bean
public Binding bindingTestQueue1FanoutExchange(Queue testQueue1, FanoutExchange testFanoutExchange) {return BindingBuilder.bind(testQueue1).to(testFanoutExchange);
}@Bean
public Binding bindingTestQueue2FanoutExchange(Queue testQueue2, FanoutExchange testFanoutExchange) {return BindingBuilder.bind(testQueue2).to(testFanoutExchange);
}
/** 声明两个队列 和 广播交换机绑定 */
消息接收
@RabbitListener(queues = "test2024.fanout.queue1")
public void rabbitListener3(String message) {System.out.println("监听广播类型交换机的1-接收到消息:" + message);
}@RabbitListener(queues = "test2024.fanout.queue2")
public void rabbitListener4(String message) {System.out.println("监听广播类型交换机的2-接收到消息:" + message);
}
消息发送
// 测试广播交换机
@Test
public void test02(){rabbitTemplate.convertAndSend("test2024.fanoutExchange", "", "this is a message from fanout!");
}
效果
至此 就实现了 Fanout 交换机的演示.