zoukankan      html  css  js  c++  java
  • 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
      生产者再次发送一条消息,消费者依然可以收到
  • 相关阅读:
    Linux如何修改命令提示符
    Linux命令详解-install
    Linux命令详解-info
    Linux命令详解-man
    Linux命令详解-printf
    Linux命令详解-echo
    Linux命令详解-whatis
    Linux命令详解-file
    Linux命令详解-help
    Linux命令详解-type
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14880921.html
Copyright © 2011-2022 走看看