RabbitMQ之(二)SpringBoot整合篇

2020-06-27  本文已影响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));
消息的监听
@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());
    }
}
上一篇 下一篇

猜你喜欢

热点阅读