• 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
      当然生产者再次发送,客户端依然会收到。
  • 相关阅读:
    The password has to have a minimum of 6 characters, including at least 1 small letter, 1 uppercase letter and 1 number
    Angular i18n的技术分享、踩过的坑
    转: .Net 4.0 ExpandoObject 使用
    min_square
    KALMAN PYTHON
    双系统安装 win + ubuntu
    docker
    drl
    shell
    导航定位方案
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14881355.html
Copyright © 2020-2023  润新知