zoukankan      html  css  js  c++  java
  • springboot整合rabbitmq(direct路由模式)

    生产者

    在fanout基础上更改;(只给routeKey是email和duanxin的发

    • 在OrderService添加如下方法
    public void makeOrderDirect(String userId,String productId,int num){
    
            String orderId = UUID.randomUUID().toString();
            System.out.println("订单生成成功:" + orderId);
    
            String exchangeName = "direct_order_exchange";
    //        String routingKey = "";
            //@param1 交换机 @param2 路由key/queue队列名称 @param3 消息内容
            rabbitTemplate.convertAndSend(exchangeName,"email",orderId);
            rabbitTemplate.convertAndSend(exchangeName,"duanxin",orderId);
        }
    
    • 增加direct的配置类(完成交换机声明以及绑定)
    @Configuration
    public class DirectRabbitMqConfiguration {
    
    
        //声明交换机
        @Bean
        public DirectExchange directExchange(){
    
            return new DirectExchange("direct_order_exchange",true,false);
        }
    
        //声明队列
        @Bean
        public Queue directSmsQueue(){
            return new Queue("sms.direct.queue",true);
        }
        @Bean
        public Queue directDuanxinQueue(){
            return new Queue("duanxin.direct.queue",true);
        }
        @Bean
        public Queue directEmailQueue(){
            return new Queue("email.direct.queue",true);
        }
    
        //完成交换机和队列绑定
        @Bean
        public Binding directSmsBinding(){
            return BindingBuilder.bind(directSmsQueue()).to(directExchange()).with("sms");
        }
        @Bean
        public Binding directDuanxinBinding(){
            return BindingBuilder.bind(directDuanxinQueue()).to(directExchange()).with("duanxin");
        }
        @Bean
        public Binding directEmailBinding(){
            return BindingBuilder.bind(directEmailQueue()).to(directExchange()).with("email");
        }
    }
    
    • 测试发送查看控制台
    @Test
    void contextLoads1() {
        orderService.makeOrderDirect("1","1",12);
    }
    

    image

    • 查看浏览器进入rabbitmq;
      image
      可以看到只有duanxin和email收到了消息
      image
    • 点进去direct_order_exchange看是否绑定上了routeKey
      image

    消费者

    • 修改对应的consumer
    @Service
    @RabbitListener(queues = {"duanxin.direct.queue"})
    public class DirectDuanxinConsumer {
    
        @RabbitHandler
        public void receiveMsg(String msg){
            System.out.println("DirectDuanxinConsumer ---接收到的订单信息是:->" + msg);
        }
    }
    
    @Service
    @RabbitListener(queues = {"email.direct.queue"})
    public class DirectEmailConsumer {
    
        @RabbitHandler
        public void receiveMsg(String msg){
            System.out.println("DirectEmailConsumer ---接收到的订单信息是:->" + msg);
        }
    }
    
    @Service
    @RabbitListener(queues = {"sms.direct.queue"})
    public class DirectSmsConsumer {
    
        @RabbitHandler
        public void receiveMsg(String msg){
            System.out.println("DirectSmsConsumer ---接收到的订单信息是:->" + msg);
        }
    }
    
    • 启动应用SpringbootOrderRabbitmqConsumerApplication,确实只有email和duanxin收到了
      image
      当然生产者再次发送,客户端依然会收到。
  • 相关阅读:
    1105 Spiral Matrix (25分)(蛇形填数)
    1104 Sum of Number Segments (20分)(long double)
    1026 Table Tennis (30分)(模拟)
    1091 Acute Stroke (30分)(bfs,连通块个数统计)
    1095 Cars on Campus (30分)(排序)
    1098 Insertion or Heap Sort (25分)(堆排序和插入排序)
    堆以及堆排序详解
    1089 Insert or Merge (25分)
    1088 Rational Arithmetic (20分)(模拟)
    1086 Tree Traversals Again (25分)(树的重构与遍历)
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14881355.html
Copyright © 2011-2022 走看看