• Routing路由模式实现消息发送和消费


    package com.itheima.service;
    
    import org.springframework.amqp.core.Message;
    import org.springframework.amqp.rabbit.annotation.Exchange;
    import org.springframework.amqp.rabbit.annotation.Queue;
    import org.springframework.amqp.rabbit.annotation.QueueBinding;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Service;
    
    import com.itheima.domain.User;
    
    @Service
    public class RabbitMQService {
    
        /**
         * Publish/Subscribe工作模式接收,处理邮件业务
         * 
         * @param message
         */
        @RabbitListener(queues = "fanout_queue_email")
        public void psubConsumerEmail(Message message) {
            byte[] body = message.getBody();
            String s = new String(body);
            System.out.println("邮件业务接收到消息: " + s);
        }
    
        /**
         * Publish/Subscribe工作模式接收,处理短信业务
         * 
         * @param message
         */
        @RabbitListener(queues = "fanout_queue_sms")
        public void psubConsumerSms(Message message) {
            byte[] body = message.getBody();
            String s = new String(body);
            System.out.println("短信业务接收到消息: " + s);
        }
        
        /**
         * Publish/Subscribe工作模式接收,处理邮件业务
         * 
         * @param message
         */
        @RabbitListener(queues = "my_fanout_queue_email")
        public void my_psubConsumerEmail(Message message) {
            byte[] body = message.getBody();
            String s = new String(body);
            System.out.println("邮件业务接收到消息: " + s);
        }
    
        /**
         * Publish/Subscribe工作模式接收,处理短信业务
         * 
         * @param message
         */
        @RabbitListener(queues = "my_fanout_queue_sms")
        public void my_psubConsumerSms(Message message) {
            byte[] body = message.getBody();
            String s = new String(body);
            System.out.println("短信业务接收到消息: " + s);
        }
        
        /**
         *  **使用基于注解的方式实现消息服务
         * 1.1、Publish/Subscribe工作模式接收,处理邮件业务
         * @param user
         */
        @RabbitListener(bindings =@QueueBinding(value =@Queue("my2_fanout_queue_email"), exchange =@Exchange(value = "my2_fanout_exchange",type = "fanout")))
        public void psubConsumerEmailAno(User user) {
            System.out.println("邮件业务接收到消息: "+user);
        }
        /**
         * 1.2、Publish/Subscribe工作模式接收,处理短信业务
         * @param user
         */
        @RabbitListener(bindings =@QueueBinding(value =@Queue("my2_fanout_queue_sms"),exchange =@Exchange(value = "my2_fanout_exchange",type = "fanout")))
        public void psubConsumerSmsAno(User user) {
            System.out.println("短信业务接收到消息: "+user);
        }
        
        /**
         *  2.1、路由模式消息接收,处理error级别日志信息
         * @param message
         */
        @RabbitListener(bindings =@QueueBinding(value =@Queue("routing_queue_error"),exchange =@Exchange(value = "routing_exchange",type = "direct"),key = "error_routing_key"))
        public void routingConsumerError(String message) {
            System.out.println("接收到error级别日志消息: "+message);
        }
        /**
         *  2.2、路由模式消息接收,处理info、error、warning级别日志信息
         * @param message
         */
        @RabbitListener(bindings =@QueueBinding(value =@Queue("routing_queue_all"),exchange =@Exchange(value = "routing_exchange",type = "direct"),key = {"error_routing_key","info_routing_key","warning_routing_key"}))
        public void routingConsumerAll(String message) {
            System.out.println("接收到info、error、warning等级别日志消息: "+message);
        }
    }
    package com.itheima;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.FanoutExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import com.itheima.domain.User;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class ApplicationTest {
    
        @Autowired
        private AmqpAdmin amqpAdmin;
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        /**
         * 使用AmqpAdmin管理员API定制消息组件
         */
        @Test
        public void amqpAdmin() {
            // 1、定义fanout类型的交换器
            amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));
            // 2、定义两个默认持久化队列,分别处理email和sms
            amqpAdmin.declareQueue(new Queue("fanout_queue_email"));
            amqpAdmin.declareQueue(new Queue("fanout_queue_sms"));
            // 3、将队列分别与交换器进行绑定
            amqpAdmin.declareBinding(
                    new Binding("fanout_queue_email", Binding.DestinationType.QUEUE, "fanout_exchange", "", null));
            amqpAdmin.declareBinding(
                    new Binding("fanout_queue_sms", Binding.DestinationType.QUEUE, "fanout_exchange", "", null));
        }
    
        /**
         * 1、Publish/Subscribe工作模式消息发送端
         */
        @Test
        public void psubPublisher() {
            User user = new User();
            user.setId(1);
            user.setUsername("石头");
            rabbitTemplate.convertAndSend("fanout_exchange", "", user);
        }
        
        /**
         * 1、Publish/Subscribe工作模式消息发送端
         */
        @Test
        public void my_psubPublisher() {
            User user = new User();
            user.setId(1);
            user.setUsername("天生自然");
            rabbitTemplate.convertAndSend("my_fanout_exchange", "", user);
        }
        
        @Test
        public void my2_psubPublisher() {
            User user = new User();
            user.setId(1);
            user.setUsername("天生自然--天生自然");
            rabbitTemplate.convertAndSend("my2_fanout_exchange", "", user);
        }
        
        /**
         *    2、Routing工作模式消息发送端
         */
        @Test
        public void routingPublisher() {
            rabbitTemplate.convertAndSend("routing_exchange","error_routing_key","routing send  error message");
        }
    }

     

    package com.itheima;
    
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.amqp.core.AmqpAdmin;
    import org.springframework.amqp.core.Binding;
    import org.springframework.amqp.core.FanoutExchange;
    import org.springframework.amqp.core.Queue;
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import org.springframework.test.context.junit4.SpringRunner;
    
    import com.itheima.domain.User;
    
    @RunWith(SpringRunner.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    public class ApplicationTest {
    
        @Autowired
        private AmqpAdmin amqpAdmin;
    
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        /**
         * 使用AmqpAdmin管理员API定制消息组件
         */
        @Test
        public void amqpAdmin() {
            // 1、定义fanout类型的交换器
            amqpAdmin.declareExchange(new FanoutExchange("fanout_exchange"));
            // 2、定义两个默认持久化队列,分别处理email和sms
            amqpAdmin.declareQueue(new Queue("fanout_queue_email"));
            amqpAdmin.declareQueue(new Queue("fanout_queue_sms"));
            // 3、将队列分别与交换器进行绑定
            amqpAdmin.declareBinding(
                    new Binding("fanout_queue_email", Binding.DestinationType.QUEUE, "fanout_exchange", "", null));
            amqpAdmin.declareBinding(
                    new Binding("fanout_queue_sms", Binding.DestinationType.QUEUE, "fanout_exchange", "", null));
        }
    
        /**
         * 1、Publish/Subscribe工作模式消息发送端
         */
        @Test
        public void psubPublisher() {
            User user = new User();
            user.setId(1);
            user.setUsername("石头");
            rabbitTemplate.convertAndSend("fanout_exchange", "", user);
        }
        
        /**
         * 1、Publish/Subscribe工作模式消息发送端
         */
        @Test
        public void my_psubPublisher() {
            User user = new User();
            user.setId(1);
            user.setUsername("天生自然");
            rabbitTemplate.convertAndSend("my_fanout_exchange", "", user);
        }
        
        @Test
        public void my2_psubPublisher() {
            User user = new User();
            user.setId(1);
            user.setUsername("天生自然--天生自然");
            rabbitTemplate.convertAndSend("my2_fanout_exchange", "", user);
        }
        
        /**
         *    2、Routing工作模式消息发送端
         */
        @Test
        public void routingPublisher() {
            rabbitTemplate.convertAndSend("routing_exchange","error_routing_key","routing send  error message");
        }
        
        @Test
        public void info_routingPublisher() {
            rabbitTemplate.convertAndSend("routing_exchange","info_routing_key","routing send  我的info message");
        }
    }

  • 相关阅读:
    odoo10 按钮点击时的弹窗提示确认消息
    odoo10 行表创建新数据时默认取值
    odoo10 关于ODOOsearch视图
    odoo10 many2one字段下拉更多选项时自定义排序方法
    变量的注释(python3.6以后的功能)
    蓝图的使用
    线程
    基础总结1
    请求上下文和应用上下文
    flask-script扩展
  • 原文地址:https://www.cnblogs.com/tszr/p/15918290.html
Copyright © 2020-2023  润新知