美文网首页
rabbitmq(三)-Direct交换器

rabbitmq(三)-Direct交换器

作者: V_da2a | 来源:发表于2018-10-04 17:32 被阅读0次

    编写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);
            //}
    
        }
    
    }
    
    image.png

    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;
        }
    }
    
    
    image.png

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

    相关文章

      网友评论

          本文标题:rabbitmq(三)-Direct交换器

          本文链接:https://www.haomeiwen.com/subject/wfpxaftx.html