前回に引き続き、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というサービスを利用して作成しました。
