前回に引き続き、Spring IntegrationでTCP通信する処理の流れを整理するために、煩雑ではありますがクライアント側のシーケンス図を描いてみました。
前回:
Spring IntegrationでTCP通信する処理の流れを調べてみた(クライアント編)
前段階
autoStartUp
が有効、つまりアプリケーション起動時にInboundGateway
やConnectionFactory
が起動するケースを想定しています。そのため起点がおかしなことになってしまいました。
-
InboundGateway
はConnectionFactory
を設定するメソッドを呼ぶ。 -
ConnectionFactory
は送受信者としてSender
,Listener
にInboundGateway
を登録する(InboundGateway
はTcpSender
,TcpListener
を実装している)。 -
ConnectionFactory
のライフサイクルをstart
にする。
TCP接続(クライアントからの受信準備)
- 指定したポート番号をもとに
ServerSocketFactory
にServerSocket
を生成するよう依頼する。 - 受け取った
ServerSocket
を保持し、Socket
が接続を受け入れられる状態で待機させる。 -
TcpConnectionServerListeningEvent
を発行する。 -
Socket
をもとにTcpConnection
を構築する。 -
TcpConnection
はConnectionFactory
を介して、InboundGateway
を送受信者として登録する。 -
InboundGateway
がTcpConnection
を保持する、 -
TcpConnectionOpenEvent
を発行する。
TCP接続(クライアントへの返信)
- クライアントからメッセージを受信する。
- メッセージとチャネルを電文変換・業務処理をおこなうためのテンプレートである
MessagingTemplate
に渡す。 - 処理結果を
InboundGateway
に返す。 - 返信するメッセージを
TcpConnection
に渡す。 -
MessageMapper
にメッセージを渡す。 -
MessageMapper
はメッセージのペイロードを抽出して返す。 - TcpConnectionはペイロードを直列化してクライアントに返信する。
備考:
図では省略していますが、MessagingTemplate
とInboundGateway
の間にはChannel
や各種エンドンポイントがあります。
TCP接続(接続の解除)
- TCP接続が確立している間になんらかの例外が発生した場合
ConnectionExceptionEvent
を発行する。 -
Socket
を閉じる。 -
TcpConnection
はInboundGateway
に解除する接続をリストから削除するよう依頼する。 -
ConnectionCloseEvent
を発行する。 -
LifeCycle
を管理するProcessor
がInboundGateway
に停止するよう依頼する。 -
InboundGateway
はConnectionFactory
に停止するよう依頼する。 -
ConnectionFactory
はServerSocket
を閉じる。 - まだ残っているTCP接続があれば、それらを閉じる。
-
TcpConnection
はInboundGateway
に解除する接続をリストから削除するよう依頼する。またタスクが残っている場合はそれも削除する。
備考:
1でなんらかの例外が発生した場合と記載しましたが、Socket
が閉じられた場合などを指します。
詳しくはTcpNetConneciton#run
を参照してください。
図の作成に使ったサービス
↑の図は前回に引き続きWebSequenceDiagramsというサービスを利用して作成しました。