TCP 介面卡

提供了使用連線工廠的 TCP 入站和出站通道介面卡,如前所述。這些介面卡有兩個相關屬性:connection-factorychannelconnection-factory 屬性指示要用於管理介面卡連線的連線工廠。channel 屬性指定訊息到達出站介面卡和入站介面卡放置訊息的通道。雖然入站和出站介面卡可以共享一個連線工廠,但伺服器連線工廠始終由入站介面卡“擁有”。客戶端連線工廠始終由出站介面卡“擁有”。每種型別只有一個介面卡可以獲取連線工廠的引用。以下示例演示如何定義客戶端和伺服器 TCP 連線工廠

<bean id="javaSerializer"
      class="org.springframework.core.serializer.DefaultSerializer"/>
<bean id="javaDeserializer"
      class="org.springframework.core.serializer.DefaultDeserializer"/>

<int-ip:tcp-connection-factory id="server"
    type="server"
    port="1234"
    deserializer="javaDeserializer"
    serializer="javaSerializer"
    using-nio="true"
    single-use="true"/>

<int-ip:tcp-connection-factory id="client"
    type="client"
    host="localhost"
    port="#{server.port}"
    single-use="true"
    so-timeout="10000"
    deserializer="javaDeserializer"
    serializer="javaSerializer"/>

<int:channel id="input" />

<int:channel id="replies">
    <int:queue/>
</int:channel>

<int-ip:tcp-outbound-channel-adapter id="outboundClient"
    channel="input"
    connection-factory="client"/>

<int-ip:tcp-inbound-channel-adapter id="inboundClient"
    channel="replies"
    connection-factory="client"/>

<int-ip:tcp-inbound-channel-adapter id="inboundServer"
    channel="loop"
    connection-factory="server"/>

<int-ip:tcp-outbound-channel-adapter id="outboundServer"
    channel="loop"
    connection-factory="server"/>

<int:channel id="loop"/>

在上述配置中,到達 input 通道的郵件透過 client 連線工廠建立的連線進行序列化,並在伺服器端接收後放置到 loop 通道。由於 loopoutboundServer 的輸入通道,因此郵件透過相同的連線迴圈回,由 inboundClient 接收,並存入 replies 通道。在網路上傳輸時使用 Java 序列化。

通常,入站介面卡使用 type="server" 連線工廠,該工廠監聽傳入的連線請求。在某些情況下,您可能希望反向建立連線,使得入站介面卡連線到外部伺服器,然後在該連線上等待入站訊息。

透過在入站介面卡上設定 client-mode="true" 來支援這種拓撲。在這種情況下,連線工廠必須是 client 型別,並且必須將 single-use 設定為 false

另外兩個屬性支援此機制。retry-interval 指定(以毫秒為單位)框架在連線失敗後嘗試重新連線的頻率。scheduler 提供一個 TaskScheduler,用於排程連線嘗試並測試連線是否仍然處於活動狀態。

如果您不提供排程器,將使用框架的預設 taskScheduler bean。

對於出站介面卡,通常在傳送第一條訊息時建立連線。出站介面卡上的 client-mode="true" 會導致在介面卡啟動時建立連線。預設情況下,介面卡會自動啟動。同樣,連線工廠必須是 client 型別,並且 single-use="false"。還支援 retry-intervalscheduler。如果連線失敗,它將由排程器或在傳送下一條訊息時重新建立。

對於入站和出站,如果介面卡已啟動,您可以透過傳送 <control-bus /> 命令來強制介面卡建立連線:@adapter_id.retryConnection()。然後,您可以使用 @adapter_id.isClientModeConnected() 檢查當前狀態。

© . This site is unofficial and not affiliated with VMware.