Spring Boot整合RabbitMQ

在上一节,我们已经掌握了RabbitMQ集群的运维方法。

在本章中,我们来看一下如何在Spring Boot中集成RabbitMQ

依赖配置

RabbitMQ实现了AMQP协议,因此,在Spring Boot中,我们直接引入ampq的starter

  1. compile("org.springframework.boot:spring-boot-starter-amqp")

RabbitMQ服务配置

在yaml中,我们需要配置RabbitMQ服务的地址:

  1. spring.rabbitmq:
  2. addresses: rmq1:5672,rmq2:5672
  3. username: guest
  4. password: guest

发送消息

在Spring Boot中发送消息需要4个步骤:

  1. 声明Exchange
  2. 声明Queue
  3. 声明Queue到Exchange的绑定
  4. 调用RabbitTemplate发送消息

前三步声明都可以通过Spring Boot注入:

  1. #Bean
  2. public TopicExchange createExchange() {
  3. return new TopicExchange("exchange");
  4. }
  5. @Bean
  6. public Queue createQueue() {
  7. return new Queue("queue");
  8. }
  9. @Bean
  10. public Binding declareBindingGeneric() {
  11. return BindingBuilder.bind(createQueue()).to(createExchange()).with("#");
  12. }

如上所示,分别声明了Exchange、Queue和Binding

发送消息相对比较简单,拿到注入的RabbitTemplate后,直接发送即可。

  1. public class Tut1Sender {
  2. @Autowired
  3. private RabbitTemplate template;
  4. @Autowired
  5. private Queue queue;
  6. @Scheduled(fixedDelay = 1000, initialDelay = 500)
  7. public void send() {
  8. String message = "Hello World!";
  9. this.template.convertAndSend(queue.getName(), message);
  10. System.out.println(" [x] Sent '" + message + "'");
  11. }
  12. }

如上,我们直接调用convertAndSend即可发送字符串类型的消息。如果想发送更复杂类型的,可以让类型实现Converter。

接受消息

接受消息,直接绑定Queue的名字即可:

  1. @RabbitListener(queues = "queue")
  2. public class Tut1Receiver {
  3. @RabbitHandler
  4. public void receive(String in) {
  5. System.out.println(" [x] Received '" + in + "'");
  6. }
  7. }

至此,我们可以在Sping Boot中集成RabbitMQ了。