广播交换机的特定是: 将消息交给所有绑定到交换机的队列
在广播模式下,消息发送流程是这样的:
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 交换机的演示.