美文网首页
RabbitMQ之(二)SpringBoot整合篇

RabbitMQ之(二)SpringBoot整合篇

作者: 与乐为乐 | 来源:发表于2020-06-27 23:38 被阅读0次

    1. 环境准备

    在docker中安装rabbitmq并运行
    5672为服务端口,15672为web控制台端口
    docker run -d -p 5672:5672 -p 15672:15672 ID  -- docker中的id
    
    导入依赖
     <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-amqp</artifactId>
       </dependency>
    <--! 自定义消息转化器Jackson2JsonMessageConverter所需依赖 -->
       <dependency>
           <groupId>com.fasterxml.jackson.core</groupId>
           <artifactId>jackson-databind</artifactId>
       </dependency>
    
    配置文件
    指定rebbitmq服务器主机
    spring.rabbitmq.host=192.168.31.162
    spring.rabbitmq.username=guest  默认值为guest
    spring.rabbitmq.password=guest   默认值为guest
    

    2. RabbitMQ的使用

    RabbitAutoConfiguration中有内部类RabbitTemplateConfiguration,在该类中向容器中分别导入了RabbitTemplateAmqpAdmin

    在类中分别注入
    @Autowired
       private RabbitTemplate rabbitTemplate;
      @Autowired
       private AmqpAdmin amqpAdmin;
    
    RabbitTemplate消息发送处理组件

    ​ 可用来发送和接收消息

    //发送消息
    rabbitTemplate.convertAndSend("amq.direct","ustc","aaaa");
          Book book = new Book();
          book.setName("西游记");
          book.setPrice(23.2f);
    //Book要实现Serializable接口
          rabbitTemplate.convertAndSend("amq.direct","ustc",book);
    
    //接收消息
    Object o = rabbitTemplate.receiveAndConvert("ustc");
          System.out.println(o.getClass());  //class cn.edu.ustc.springboot.bean.Book
          System.out.println(o);            //Book{name='西游记', price=23.2}
    
    自定义消息转换器

    默认的消息转化器是SimpleMessageConverter,对于对象以jdk序列化方式存储,若要以Json方式存储对象,就要自定义消息转换器

    @Configuration
    public class AmqpConfig {
        @Bean
        public MessageConverter messageConverter() {
            //在容器中导入Json的消息转换器
            return new Jackson2JsonMessageConverter();
        }
    }
    
    AmqpAdmin管理组件

    可用于创建和删除exchange、binding和queue

    //创建Direct类型的Exchange
    amqpAdmin.declareExchange(new DirectExchange("admin.direct"));
    //创建Queue
    amqpAdmin.declareQueue(new Queue("admin.test"));
    //将创建的队列与Exchange绑定
    amqpAdmin.declareBinding(new Binding("admin.test", Binding.DestinationType.QUEUE,"admin.direct","admin.test",null));
    
    消息的监听
    • 在回调方法上标注@RabbitListener注解,并设置其属性queues,注册监听队列,当该队列收到消息时,标注方法遍会调用

    • 可分别使用Message和保存消息所属对象进行消息接收,若使用Object对象进行消息接收,实际上接收到的也是Message

    @Service
    public class BookService {
        @RabbitListener(queues = {"admin.test"})
        public void receive1(Book book){
            System.out.println("收到消息:"+book);
        }
    
        @RabbitListener(queues = {"admin.test"})
        public void receive1(Object object){
            System.out.println("收到消息:"+object.getClass());
            //收到消息:class org.springframework.amqp.core.Message
        }
        
        @RabbitListener(queues = {"admin.test"})
        public void receive2(Message message){
            System.out.println("收到消息"+message.getHeaders()+"---"+message.getPayload());
        }
    }
    

    相关文章

      网友评论

          本文标题:RabbitMQ之(二)SpringBoot整合篇

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