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

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控制面板也會看到有消息。

總結

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

GitHub地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章