美文网首页
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 交换器类型 路由类型

    RabbitMQ交换器类型常用的有fanout、direct、topic、headers这四种。 fanout: ...

  • rabbitmq(三)-Direct交换器

    编写Direct模式application.yml 配置文件都用相同的就好 jar包还是之前的1.消息接收:In...

  • RabbitMQ的四种交换器类型

    RabbitMQ常用的交换器类型有fanout、direct、topic、headers这四种。AMQP协议里还提...

  • 2.rabbitMq交换器类型(gold_axe)

    交换器类型, 由交换器声明的时候决定 Direct headers(几乎和 direct 一样)不实用,可以忽略。...

  • rabbitmq交换器

    1:direct交换器 服务器必须实现direct类型的交换器,包含一个空白字符串名称的默认交换器,一旦申明一个队...

  • CentOs 6.7 下 安装 rabbitmq

    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMq的整...

  • 二、RabbitMQ架构模型

    RabbitMQ架构模型 一、生产者和消费者 二、队列 三、交换器、路由键、绑定 Exchange:交换器。 Ra...

  • RabbitMQ,消息中间件的AMQP协议的结构

    知识要点: RabbitMQ几大组件 交换器类型 RabbitMQ运行流程 Connection与Channel ...

  • 持久化

        rabbitmq的持久化分成三个部分:交换器的持久化、队列的持久化和消息的持久化     交换器的持久化是...

  • Exchange的类型

    fanout     它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。 direct     di...

网友评论

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

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