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
      当然生产者再次发送,客户端依然会收到。
  • 相关阅读:
    javascript得知
    一旦配置oracle em经验
    windows 下一个mysql password忘记改变
    彩色图像--图像切 色彩空间切割
    Delphi 6 Web Services初步评估之三(转)
    Delphi 用Web App Debugger简单调试ISAPI 转
    Delphi socket() 函数的应用
    用Delphi实现WinSocket高级应用
    delphi编写winsocket的流程
    Delphi使用NativeXml访问XML文件
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14881355.html
Copyright © 2011-2022 走看看