zoukankan      html  css  js  c++  java
  • rabbitmq(三)-Direct交换器

    编写Direct模式
    application.yml

    mq: 
      config: 
    #交换器名称
        exchange: log.direct
        queue: 
          error: 
    #队列名称
            name: log.error
            routing: 
              key: log.error.routiang.key
          info: 
            name: log.info
            routing: 
          #路由键值
              key: log.info.routiang.key
    spring: 
      application: 
        name: liao
      rabbitmq: 
        host: localhost
        password: 123456
        port: 5672
        username: 123456

    配置文件都用相同的就好 jar包还是之前的
    1.消息接收:
    InfoReceiver.java

    @Component
    //@RabbitListener(queues = {"hello-queue1","hello-queue2"})
    //@RabbitListener(queues = "hello-queue")
    //绑定队列
    //QueueBinding  value:绑定队列的名称
    //@Queue   value:配置队列名称
    //          autoDelete:是否是一个颗删除的队列
    //exchange 配置交换器
    //@Exchange   value:交换器名称
    //            type:指定具体的交换器类型   ExchangeTypes
    //key  路由键
    @RabbitListener(
            bindings =@QueueBinding(value =
            @Queue(value = "${mq.config.queue.info.name}",autoDelete ="true"),
                    exchange =@Exchange(value ="${mq.config.exchange}",type = ExchangeTypes.DIRECT),
                    key = "${mq.config.queue.info.routing.key}"
            )
    )
    public class InfoReceiver {
    
    
            @Autowired
            private AmqpTemplate amqpTemplate;
    
    
            //表示这个方法支持监听消息   如果为true,则指定这是有效负载类型的默认回退方法
            @RabbitHandler
            public void process( String msg){
                    System.out.println();
                   // amqpTemplate.receive(msg);
                System.out.println("队列info接受到了消息:"+msg);
            }
    
    
    }

    2.消息发送

    @Component
    public class Send {
    
        @Autowired
        private AmqpTemplate amqpTemplate;
        @Value("${mq.config.exchange}")
        private String exchange;
        @Value("${mq.config.queue.info.routing.key}")
        private String routingkey;
    
    
         public void  send(User msg){
            //交换器
             // 路游键
             //消息
             amqpTemplate.convertAndSend(exchange,routingkey,msg.toString());
         }
    
    }

    test

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes =SpringcloudMqApplication.class )
    public class SpringcloudMqApplicationTests {
    
        @Autowired
        private  Send send;
    
    
        @Test
        public void contextLoads() {
            //while (true){
                int a=1;
                User user=new User();
                user.setId(Long.valueOf(a++));
                user.setUsername("yjakly");
                send.send(user);
            //}
    
        }
    
    }

    3.配置json格式的消息队列
    发送配置

    @Configuration
    public class RabbitMqConfig {
        
        @Bean
        public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
            RabbitTemplate template = new RabbitTemplate(connectionFactory);
            template.setMessageConverter(new Jackson2JsonMessageConverter());
            return template;
        }
        //发送消息设置
        @Bean
        public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactoryPlus(
                SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory,
                Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
            rabbitListenerContainerFactory.setMessageConverter(jackson2JsonMessageConverter);
            return rabbitListenerContainerFactory;
        }
        //json格式转换
        @Bean
        public Jackson2JsonMessageConverter jackson2JsonMessageConverter(ObjectMapper xssObjectMapper) {
            return new Jackson2JsonMessageConverter(xssObjectMapper);
        }
        
    }

    接收消息配置

    @Configuration
    public class RabbitMqConfig {
    
    
        @Bean
        public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
            RabbitTemplate template = new RabbitTemplate(connectionFactory);
            template.setMessageConverter(new Jackson2JsonMessageConverter());
            return template;
        }
        
        @Bean
        public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) {
            SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
            factory.setConnectionFactory(connectionFactory);
            factory.setMessageConverter(new Jackson2JsonMessageConverter());
            return factory;
        }
    }

     注意!! 发送消息实体类与接收消息实体类需要在一个包下 不然会报错找不到实体

  • 相关阅读:
    数以百万计美元的融资YO是什么东东?
    工作流和审批流
    Linux makefile 教程 很具体,且易懂
    【吐槽】火车票一票难求啊
    poj 2828 Buy Tickets(树状数组 | 线段树)
    如花搞笑图片集锦(转贴)
    苹果开发人员账号注冊流程
    优秀团队建设--美国式团队(ppt)
    屏幕分辨率(QQVGA、QVGA、VGA、XGA、WXGA、WUXGA和WSXGA+)
    怎样设计接口?
  • 原文地址:https://www.cnblogs.com/liaohongbin/p/9888875.html
Copyright © 2011-2022 走看看