• springboot整合rabbitmq(fanout广播模式)


    生产者

    • 新建producer(springboot-order-rabbitmq-producer)
      image
    • 修改application.yml
    server:
      port: 8080
    
    spring:
      rabbitmq:
        username: admin
        password: admin
        virtual-host: /
        host: 47.100.41.55
        port: 5672
    
    • 模拟一个生产订单服务
    @Service
    public class OrderService {
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        /**
         * 
         * @param userId
         * @param productId
         * @param num
         */
        public void makeOrder(String userId,String productId,int num){
    
            String orderId = UUID.randomUUID().toString();
            System.out.println("订单生成成功:" + orderId);
    
            String exchangeName = "fanout_order_exchange";
            String routingKey = "";
            //@param1 交换机 @param2 路由key/queue队列名称 @param3 消息内容
            rabbitTemplate.convertAndSend(exchangeName,routingKey,orderId);
        }
    }
    
    • 创建交换机,队列的关系
    @Configuration
    public class RabbitMqConfiguration {
    
    
        //声明交换机
        @Bean
        public FanoutExchange fanoutExchange(){
    
            return new FanoutExchange("fanout_order_exchange",true,false);
        }
    
        //声明队列
        @Bean
        public Queue smsQueue(){
            return new Queue("sms.fanout.queue",true);
        }
        @Bean
        public Queue duanxinQueue(){
            return new Queue("duanxin.fanout.queue",true);
        }
        @Bean
        public Queue emailQueue(){
            return new Queue("email.fanout.queue",true);
        }
    
        //完成交换机和队列绑定
        @Bean
        public Binding smsBinding(){
            return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
        }
        @Bean
        public Binding duanxinBinding(){
            return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
        }
        @Bean
        public Binding emailBinding(){
            return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
        }
    }
    
    • 测试生产者运行
    @SpringBootTest
    class SpringbootOrderRabbitmqProducerApplicationTests {
        @Autowired
        private OrderService orderService;
        @Test
        void contextLoads() {
            orderService.makeOrder("1","1",12);
        }
    }
    

    image
    同时在浏览器打开rabbitmq http://47.100.41.55:15672/
    切换到exchanges,queues

    image
    image

    消费者

    • 新建consumer(springboot-order-rabbitmq-consumer)同上
    • 修改application.yml,其他一样,端口号改成8081
    • 建立对应的consumer类
    @Service
    @RabbitListener(queues = {"duanxin.fanout.queue"})
    public class FanoutDuanxinConsumer {
    
        @RabbitHandler
        public void receiveMsg(String msg){
            System.out.println("FanoutDuanxinConsumer ---接收到的订单信息是:->" + msg);
        }
    }
    
    @Service
    @RabbitListener(queues = {"email.fanout.queue"})
    public class FanoutEmailConsumer {
    
        @RabbitHandler
        public void receiveMsg(String msg){
            System.out.println("FanoutEmailConsumer ---接收到的订单信息是:->" + msg);
        }
    }
    
    @Service
    @RabbitListener(queues = {"sms.fanout.queue"})
    public class FanoutSmsConsumer {
    
        @RabbitHandler
        public void receiveMsg(String msg){
            System.out.println("FanoutSmsConsumer ---接收到的订单信息是:->" + msg);
        }
    }
    
    • 启动SpringbootOrderRabbitmqConsumerApplication
    • 查看控制台
      这是刚才生产者发送的消息
      image
      生产者再次发送一条消息,消费者依然可以收到
  • 相关阅读:
    流行的编程思维_面向对象-1
    db_Driver Manager
    SpringAOP
    Spring ioc的核心源码及拓展
    linux内核中把自己写的驱动添加到make menuconfig
    如何参考am335x ti官方技术
    AM335X linux嵌入式平台can驱动移植
    linux AM335x嵌入式平台spi驱动调试
    linux 设备树 gpio获取
    linux 为开发板添加板级文件config.h
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14880921.html
Copyright © 2020-2023  润新知