RabbitMQ(三):RabbitMQ與Spring Boot簡單整合

James_Shangguan發表於2019-07-27

RabbitMQ是目前非常熱門的一款訊息中介軟體,不管是網際網路大廠還是中小企業都在大量使用。Spring Boot的興起,極大地簡化了Spring的開發,本文將使用Spring Boot與RabbitMQ進行簡單整合,實現生產和消費訊息。

配置

Spring Boot使用了這麼久,套路差不多摸清楚了。Spring Boot與其他元件進行整合,無非就是加入pom依賴,接著配置一些基本資訊,然後就可以使用相關注解進行開發了。

RabbitMQ也是相同的套路,第一步要引入依賴。要引入的依賴比較容易記,RabbitMQ實現了AMQP協議,引入依賴spring-boot-starter-amqp

           <!-- rabbitmq依賴 -->
           <dependency>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-amqp</artifactId>
           </dependency>

第二步要配置RabbitMQ連線資訊,包括主機、埠號、使用者名稱和密碼。RabbitMQ配置資訊:

spring.rabbitmq.host=192.168.16.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

如果沒有安裝RabbitMQ,我推薦使用Docker快速安裝和啟動,啟動命令:

docker run -d --hostname my-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3.8.0-beta.4-management

實現生產者和消費者

第三步實現生產和消費者。

生產者

生產者用來生產訊息並進行傳送。需要用到RabbitTemplateRabbitTemplate是傳送訊息的關鍵類,convertAndSend方法可以指定訊息傳送的交換器、路由鍵、訊息內容等。

@Component
public class Producer {
    @Autowired
    RabbitTemplate rabbitTemplate;
    
    public void produce() {
        String message =  new Date() + "Beijing";
        System.out.println("生產者生產訊息=====" + message);
        rabbitTemplate.convertAndSend("rabbitmq_queue",  message);
    }
}

消費者

消費者消費生產者傳送的訊息。實現消費者主要用到註解@RabbitListener@RabbitListener是一個功能強大的註解。這個註解裡面可以註解配置@QueueBinding、@Queue、@Exchange直接通過這個組合註解一次性搞定多個交換機、繫結、路由、並且配置監聽功能等。

  1. 在RabbitMQ控制皮膚建立好佇列,使用@RabbitListener監聽佇列。
@RabbitListener(queues = "rabbitmq_queue")
  1. 使用@RabbitListener自動建立佇列。
@RabbitListener(queuesToDeclare = @Queue("myQueue"))
  1. 使用@RabbitListener自動建立佇列,並對Exchange和Queue進行繫結。
@RabbitListener(bindings = @QueueBinding(value =  @Queue("myQueue"), key = "mobi", exchange = @Exchange("myExchange")))

本文使用@RabbitListener自動建立一個佇列。

@Component
public class Consumer {
    @RabbitHandler
    @RabbitListener(queuesToDeclare = @Queue("rabbitmq_queue"))
    public void process(String message) {
        System.out.println("消費者消費訊息=====" + message);
    }
}

測試

第四步測試。為了方便,寫一個測試類生產訊息。然後啟動工程,執行測試類,使生產者傳送訊息,不出意外消費者將會消費訊息,在控制檯輸出資訊。

@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {

    @Autowired
    Producer producer;

    @Test
    public void contextLoads() {
        producer.produce();
    }

}

操作之後可以在測試控制檯看到生產者訊息傳送成功,在該工程的控制檯看到訊息消費成功。

訪問RabbitMQ控制皮膚也會看到有訊息。

RabbitMQ(三):RabbitMQ與Spring Boot簡單整合

總結

Spring Boot極大的簡化各種元件的使用,在實際應用中,當一個服務處理完成之後可以將訊息放進RabbitMQ訊息佇列,另外一個服務從佇列中取訊息進行消費,這樣可以降低服務之間的耦合,實現一些非同步的操作。本文僅作為一個簡單demo供參考。

GitHub地址

相關文章