SpringBoot整合RabbitMQ之Fanout扇形交换器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了SpringBoot整合RabbitMQ之Fanout扇形交换器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4650字,纯文字阅读大概需要7分钟。
内容图文
![SpringBoot整合RabbitMQ之Fanout扇形交换器](/upload/InfoBanner/zyjiaocheng/1010/6e87eb71b4bd45d7a62250de383c5576.jpg)
接着前面的Topic交换器,我们来研究一下Fanout交换器。
Fanout交换器:
扇形模式,不处理路由键,只是简单将队列绑定到交换器,发送到交换器的每条消息都回被转发到该交换器绑定的所有队列中,类型子网传播,通过Fanout交换器转发消息是最快的
现在进入实例工程来了解一下FanoutExchange扇形交换器的用法,还是基于上一篇的实例工程上去做编码
首先编写rabbitmq-provider生产者项目
创建FanoutRabbitConfig配置类
package com.rabbitmq.provider.config; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FanoutRabbitConfig { /** * 创建三个队列 :fanout.A fanout.B fanout.C * 将三个队列都绑定在交换机 fanoutExchange 上 * 因为是扇型交换机, 路由键无需配置,配置也不起作用 */ @Bean Queue queueA() { return new Queue("fanout.A"); } @Bean Queue queueB() { return new Queue("fanout.B"); } @Bean Queue queueC() { return new Queue("fanout.C"); } @Bean FanoutExchange fanoutExchange() { return new FanoutExchange("fanoutExchange"); } @Bean Binding bindingExchangeA() { return BindingBuilder.bind(queueA()).to(fanoutExchange()); } @Bean Binding bindingExchangeB() { return BindingBuilder.bind(queueB()).to(fanoutExchange()); } @Bean Binding bindingExchangeC() { return BindingBuilder.bind(queueC()).to(fanoutExchange()); } }
在Controller上多加一个接口
@GetMapping("/sendFanoutMessage") public String sendFanoutMessage(){ String messageId = String.valueOf(UUID.randomUUID()); String messageData = "message: test fanoutMessage"; String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); Map<String,Object> map = new HashMap<>(); map.put("messageId",messageId); map.put("messageData",messageData); map.put("createTime",createTime); rabbitTemplate.convertAndSend("fanoutExchange",null,map); return "ok"; }
好了,生产者的代码就完成了,现在去rabbitmq-consumer消费者项目上完成后续代码
创建FanoutRabbitConfig配置类
package com.rabbitmq.consumer.config; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.core.Queue; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FanoutRabbitConfig { /** * 创建三个队列 :fanout.A fanout.B fanout.C * 将三个队列都绑定在交换机 fanoutExchange 上 * 因为是扇型交换机, 路由键无需配置,配置也不起作用 */ @Bean Queue queueA() { return new Queue("fanout.A"); } @Bean Queue queueB() { return new Queue("fanout.B"); } @Bean Queue queueC() { return new Queue("fanout.C"); } @Bean FanoutExchange fanoutExchange() { return new FanoutExchange("fanoutExchange"); } @Bean Binding bindingExchangeA() { return BindingBuilder.bind(queueA()).to(fanoutExchange()); } @Bean Binding bindingExchangeB() { return BindingBuilder.bind(queueB()).to(fanoutExchange()); } @Bean Binding bindingExchangeC() { return BindingBuilder.bind(queueC()).to(fanoutExchange()); } }
创建FanoutReceiverA、FanoutReceiverB、FanoutReceiverC
package com.rabbitmq.consumer.receiver; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Component @RabbitListener(queues = "fanout.A") public class FanoutReceiverA { @RabbitHandler public void process(Map message) { System.out.println("FanoutReceiverA 消费者收到消息: " + message); } }
package com.rabbitmq.consumer.receiver; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Component @RabbitListener(queues = "fanout.B") public class FanoutReceiverB { @RabbitHandler public void process(Map message) { System.out.println("FanoutReceiverB 消费者收到消息: " + message); } }
package com.rabbitmq.consumer.receiver; import org.springframework.amqp.rabbit.annotation.RabbitHandler; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import java.util.Map; @Component @RabbitListener(queues = "fanout.C") public class FanoutReceiverC { @RabbitHandler public void process(Map message) { System.out.println("FanoutReceiverC 消费者收到消息: " + message); } }
启动这两个项目,使用postman工具调用sendFanoutMessage这个接口
可以看到只要发送到 fanoutExchange 这个扇型交换机的消息, 三个队列都绑定这个交换机,所以三个消息接收类都监听到了这条消息。
内容总结
以上是互联网集市为您收集整理的SpringBoot整合RabbitMQ之Fanout扇形交换器全部内容,希望文章能够帮你解决SpringBoot整合RabbitMQ之Fanout扇形交换器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。