首頁 > 軟體

SpringCloud Stream 整合RabbitMQ的基本步驟

2022-03-30 13:01:33

本篇簡單介紹SpringCloud Stream 整合RabbitMQ基本步驟:

  • 引入SpringCloud
  • 引入SpringCloud Stream相關依賴
  • 定義繫結介面: 訊息生產者(Output…Binding) 、訊息消費者(Input…Binding)
  • @EnableBinding 在對應類上進行定義
  • @StreamListener 在對應方法上建立監聽用來消費訊息
  • 呼叫output的send()方法生產訊息

一、專案介紹

演示SpringCloud Stream 整合RabbitMQ,專案可以在一個工程裡完成,本次建立了一個工程mq-service,其中包含三個Module:

  • mq-service-base :基礎模組(包含了共用依賴、共用變數)
  • mq-service-producer :生產者
  • mq-service-consumer :消費者

注: 完全可以在一個工程裡實現,這裡為了區分,併為了後續單獨啟動或停止生產者或消費者做實驗,也為了適應實際應用專案,所以建立了不同Module

(1)版本

  • SpringBoot : 2.0.6.RELEASE
  • SpringCloud : Finchley.SR2
  • RabbitMQ : 3.8.1

(2)專案整體結構

(3)基礎模組

1)pom.xml

這裡作為公共模組引入SpringCloud、Spring Cloud Stream等,其中也再此引入fastjson、lombok等工具依賴
(完整程式碼見文章最下面)
其中Spring Cloud Stream如下:

<!-- Spring Cloud Stream, 用於MQ訊息傳送-->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-stream</artifactId>
</dependency>
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>

2) model

定義共用的變數,如CollectionRequest.java

二、生產者

(1)結構

(2)pom.xml

匯入base的依賴即可,因為相關共用依賴在base中已經引入

<dependency>
	<groupId>com.zrk</groupId>
	<artifactId>mq-service-base</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

(3)定義繫結(介面)

OutputMessageBinding.java

public interface OutputMessageBinding {
    /** Topic 名稱*/
    String OUTPUT = "message-center-out";
    @Output(OUTPUT)
    MessageChannel output();

}

(4)新增設定

# rabbitmq連線資訊
spring.rabbitmq.addresses=192.168.1.125
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456

spring.cloud.stream.bindings.message-center-out.destination=message-center
spring.cloud.stream.rabbit.bindings.message-center-out.consumer.exchangeType=fanout

(5) 呼叫方法

CollectionServiceImpl.java

@Service
@EnableBinding(OutputMessageBinding.class)
public class CollectionServiceImpl implements CollectionService{
    @Resource
    private OutputMessageBinding outputMessageBinding;
    /**
     * @param schoolName
     * @param content
     */
    @Override
    public void getCollection(String schoolName, String content) {
        CollectionRequest request = new CollectionRequest();
        request.setSchoolName(schoolName);
        request.setContent(content);
        outputMessageBinding.output().send(MessageBuilder.withPayload(request).build());
    }
}

注: 主要是兩點

  • @EnableBinding 定義
  • outputMessageBinding.output().send(MessageBuilder.withPayload(request).build()); 生產訊息

三、消費者

(1)結構

(2)pom.xml

匯入base的依賴即可,因為相關共用依賴在base中已經引入

<dependency>
	<groupId>com.zrk</groupId>
	<artifactId>mq-service-base</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

(3)定義繫結(介面)

InputMessageBinding.java

public interface InputMessageBinding {
    String INPUT = "message-center-input";
    @Input(INPUT)
    SubscribableChannel input();
}

注: 消費者這裡與生產者不同,用的是SubscribableChannel ,而生產者用的是MessageChannel

(4)新增設定

# rabbitmq連線資訊
spring.rabbitmq.addresses=192.168.1.125
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
spring.cloud.stream.bindings.message-center-input.destination=message-center
spring.cloud.stream.bindings.message-center-input.group=${spring.application.name}

(5) 呼叫方法

CollectionReceiver.java

@Slf4j
@EnableBinding(InputMessageBinding.class)
public class CollectionReceiver {
    @StreamListener(InputMessageBinding.INPUT)
    public void handle(String value){
        log.info("[訊息] 接收到傳送訊息MQ: {}", value);
        CollectionRequest request = JSON.parseObject(value, CollectionRequest.class);
        log.info("處理收集資訊:" + request.toString());
    }
}

注: 主要是兩點

  • @EnableBinding 定義
  • @StreamListener 註冊監聽

至此,生產者與消費者都建立完成,分別啟動兩個專案,並呼叫生產者介面進行驗證:

四、驗證 在postman 存取生產者介面:

localhost:30110/collection/getCollectionschoolName=‘zrk’&content=‘send message to rabbitmq’

觀察消費者紀錄檔:

檢視rabbitmq首頁

則證明已經整合成功,接下來將研究一下更多的設定與用法。

如果有需要,可以參考專案完整程式碼:https://github.com/zrk333/mq-service

到此這篇關於SpringCloud Stream 整合RabbitMQ的文章就介紹到這了,更多相關SpringCloud Stream 整合RabbitMQ內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com