整合端點
本節介紹 Spring Integration 提供的各種通道介面卡和訊息閘道器,以支援與外部系統的基於訊息的通訊。
從 AMQP 到 Zookeeper,每個系統都有其自身的整合要求,本節將對此進行介紹。
端點快速參考表
如前幾節所述,Spring Integration 提供了許多用於與外部系統、檔案系統等進行介面的端點。
為了透明的依賴管理,Spring Integration 提供了一個 BOM POM,可以匯入到 Maven 配置中。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-bom</artifactId>
<version>7.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
回顧一下
-
入站通道介面卡用於單向整合,將資料引入訊息應用程式。
-
出站通道介面卡用於單向整合,將資料從訊息應用程式傳送出去。
-
入站閘道器用於雙向整合流,其中其他系統呼叫訊息應用程式並接收回復。
-
出站閘道器用於雙向整合流,其中訊息應用程式呼叫某個外部服務或實體並期望結果。
下表總結了各種端點,並提供了到相應章節的快速連結。
| 模組 | 入站介面卡 | 出站介面卡 | 入站閘道器 | 出站閘道器 |
|---|---|---|---|---|
AMQP |
||||
Apache Camel |
否 |
否 |
||
Apache Cassandra |
否 |
否 |
||
Debezium |
否 |
否 |
否 |
|
事件 |
否 |
否 |
||
Feed |
否 |
否 |
否 |
|
檔案 |
否 |
|||
FTP(S) |
否 |
|||
GraphQL |
否 |
否 |
否 |
|
Hazelcast |
否 |
否 |
||
HTTP |
||||
JDBC |
否 |
|||
JMS |
||||
JMX |
否 |
|||
JPA |
否 |
|||
Apache Kafka |
||||
郵件 |
否 |
否 |
||
MongoDB |
否 |
否 |
||
MQTT |
否 |
否 |
||
R2DBC |
否 |
否 |
||
Redis |
Redis 入站通道介面卡、Redis 佇列入站通道介面卡、Redis 儲存入站通道介面卡、Redis 流入站通道介面卡 |
Redis 出站通道介面卡、Redis 隊列出站通道介面卡、Redis 儲存出站通道介面卡、Redis 流出站通道介面卡 |
||
資源 |
否 |
否 |
否 |
|
RSocket |
否 |
否 |
||
SFTP |
否 |
|||
SMB |
否 |
|||
STOMP |
否 |
否 |
||
流 |
否 |
否 |
||
Syslog |
否 |
否 |
否 |
|
TCP |
||||
UDP |
否 |
否 |
||
WebFlux |
||||
Web 服務 |
否 |
否 |
||
Web 套接字 |
否 |
否 |
||
XMPP |
否 |
否 |
||
ZeroMQ |
否 |
否 |
此外,正如核心訊息傳遞中所述,Spring Integration 提供了用於與普通 Java 物件 (POJO) 互動的端點。正如通道介面卡中所述,<int:inbound-channel-adapter> 元素允許您輪詢 Java 方法以獲取資料。<int:outbound-channel-adapter> 元素允許您將資料傳送到 void 方法。正如訊息閘道器中所述,<int:gateway> 元素允許任何 Java 程式呼叫訊息流。這些都無需對 Spring Integration 產生任何源級別依賴即可工作。在這種情況下,出站閘道器的等效用法是使用服務啟用器(參見服務啟用器)來呼叫返回某種 Object 的方法。
從 5.2.2 版本開始,所有入站閘道器都可以配置一個 errorOnTimeout 布林標誌,以便在下游流在回覆超時期間未返回回覆時丟擲 MessageTimeoutException。計時器直到執行緒將控制權返回給閘道器後才啟動,因此通常只有當下遊流是非同步的,或者由於某個處理程式(例如過濾器)返回 null 而停止時,它才有用。這樣的異常可以在 errorChannel 流中處理,例如為請求客戶端生成補償回復。