TCP アダプター
前述の接続ファクトリを使用する TCP 受信および送信 チャネルアダプターが提供されます。これらのアダプターには、connection-factory
および channel
という 2 つの関連する属性があります。connection-factory
属性は、アダプターの接続を管理するためにどの接続ファクトリを使用するかを示します。channel
属性は、メッセージが送信アダプターに到着するチャネル、およびメッセージが受信アダプターによって配置されるチャネルを指定します。受信アダプターと送信アダプターの両方が接続ファクトリを共有できますが、サーバー接続ファクトリは常に受信アダプターによって「所有」されます。クライアント接続ファクトリは、常に送信アダプターによって「所有」されます。接続ファクトリへの参照を取得できるのは、各型の 1 つのアダプターのみです。次の例は、クライアントとサーバーの 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"/>
アノテーションベースの構成および TCP コンポーネントに JavaDSL を使用するも参照してください。
上記の構成では、input
チャネルに到着したメッセージは、client
接続ファクトリによって作成された接続を介して直列化され、サーバーで受信され、loop
チャネルに置かれます。loop
は outboundServer
の入力チャネルであるため、メッセージは同じ接続でループバックされ、inboundClient
によって受信され、replies
チャネルに格納されます。Java 直列化がワイヤ上で使用されます。
通常、受信アダプターは、受信接続リクエストをリッスンする type="server"
接続ファクトリを使用します。場合によっては、受信アダプターが外部サーバーに接続し、その接続で受信メッセージを待機するように、逆に接続を確立することができます。
このトポロジーは、受信アダプターで client-mode="true"
を設定することでサポートされます。この場合、接続ファクトリの型は client
でなければならず、single-use
を false
に設定する必要があります。
2 つの追加属性がこのメカニズムをサポートします。retry-interval
は、接続障害後にフレームワークが再接続を試行する頻度(ミリ秒単位)を指定します。scheduler
は TaskScheduler
を提供して、接続試行をスケジュールし、接続がまだアクティブであることをテストします。
スケジューラを指定しない場合は、フレームワークのデフォルトの taskScheduler Bean が使用されます。
送信アダプターの場合、通常、最初のメッセージが送信されたときに接続が確立されます。送信アダプターの client-mode="true"
により、アダプターの起動時に接続が確立されます。デフォルトでは、アダプターは自動的に開始されます。繰り返しますが、接続ファクトリは client
型であり、single-use="false"
を持っている必要があります。retry-interval
および scheduler
もサポートされています。接続が失敗した場合、スケジューラによって、または次のメッセージが送信されたときに、接続が再確立されます。
受信と送信の両方で、アダプターが開始されている場合、<control-bus />
コマンド @adapter_id.retryConnection()
を送信することにより、アダプターに強制的に接続を確立させることができます。その後、@adapter_id.isClientModeConnected()
を使用して現在の状態を調べることができます。