整合Spring Cloud Stream Binder與RabbitMQ進行消息發送與接收

我最新最全的文章都在 南瓜慢說 www.pkslow.com ,歡迎大家來喝茶!

1 前言

Spring Cloud Stream專門用於事件驅動的微服務系統,使用消息中間件來收發信息。使用Spring Cloud Stream可專注於業務開發,而不用花太多心思在應用與MQ之間的交互上。而且,在切換MQ後,也無須做太多的代碼改動。

本文將整合Spring Cloud StreamRabbitMQ,以實現消息收發。

2 整合過程

2.1 添加依賴

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>

不同的MQ使用不同的依賴,非常容易切換。

2.2 定義處理收發的方法

隊列無非就是收和發,所以我們要先定義好,怎麼樣發,怎麼樣收。

發送消息:

@Bean
public Supplier<String> pkslowSource() {
  return () -> {
    String message = "www.pkslow.com";
    log.info("Sending value: " + message);
    return message;
  };
}

只發送一個String,一般業務通常爲Entity類。這裏發送的內容也固定不變,實際業務可以通過查數據庫,讀文件等方式獲取數據源。

接收消息:

@Bean
public Consumer<String> pkslowSink() {
  return message -> {
    log.info("Received message " + message);
  };
}

直接打印消息即可,項目中的邏輯可按具體業務實現。

2.3 配置屬性

配置RabbitMQ:

spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: pkslow
    password: 123456

配置Spring Cloud Stream的相關項:

spring:
  cloud:
    stream:
      function:
        definition: pkslowSource;pkslowSink
      bindings:
        pkslowSource-out-0:
         destination: pkslow-topic
        pkslowSink-in-0:
          destination: pkslow-topic
      poller:
        fixed-delay: 500

spring.cloud.stream.function.definition會定義處理方法,如本文的收發消息的方法;

bindings配置對應的function;destination指向MQ的主題;

這裏配了一個poller,每隔500ms就會發送一次消息。

2.4 運行

先啓動個RabbitMQ:

docker run \
-e RABBITMQ_DEFAULT_USER=pkslow \
-e RABBITMQ_DEFAULT_PASS=123456 \
-p 5672:5672 -p 15672:15672 \
rabbitmq:3.8-management

運行程序後,會自己創建主題、發送信息、接收信息:

運行日誌如下:

可以看到每一次發/收大概是間隔了500ms,當然不可能是精確的500ms。

3 總結

代碼請查看:https://github.com/LarryDpk/pkslow-samples


歡迎關注微信公衆號<南瓜慢說>,將持續爲你更新...

多讀書,多分享;多寫作,多整理。

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