Spring統合では、サーバーソケットからメッセージを送受信するために、いくつかのチャネルアダプタを使用しています。私はいつも次のアダプタを使用してクライアントの接続を作成します。TcpReceivingChannelAdapterコラボレーションを使用するTcpSendingMessageHandler
@Bean
public TcpReceivingChannelAdapter tcpIn(AbstractClientConnectionFactory connectionFactory) throws Exception {
TcpReceivingChannelAdapter receiver = new TcpReceivingChannelAdapter();
receiver.setOutputChannel(fromTcp());
receiver.setConnectionFactory(connectionFactory);
return receiver;
}
@Bean
@ServiceActivator(inputChannel = "toTcp")
public TcpSendingMessageHandler tcpOut(AbstractClientConnectionFactory connectionFactory) throws Exception {
TcpSendingMessageHandler sender = new TcpSendingMessageHandler();
sender.setConnectionFactory(connectionFactory);
sender.setClientMode(true);
return sender;
}
ここでの問題は、サーバーがリモートポート(私の開いたソケットポート)に同じソケットに答えです。たとえば、ソケットを127.0.0.1:4444に接続すると、サーバーは開かれたポート(ソケットtcpの動的ポート)に代わり、6873に応答しています。同じソケットを使用しています。
迅速な答えはTcpOutboundGateway
を使用することができますが、私は、このシナリオでの問題のカップルを持っている:
- 私は考慮に 送信/読み取り操作を取ることなく接続イベントを管理する必要があります。たとえば、メッセージを送信する前に、ソケットを自動接続して を開く必要があります。
- ドキュメントによると:大量のメッセージに対する
、 チャネルアダプタの協調のペアを使用することを検討してください。ただし、コラボレーション ロジックを提供する必要があります。
大量のシナリオでは、要求/応答ソケットにどのコンポーネントを使用する必要がありますか?