2016-10-05 6 views
1

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を使用することができますが、私は、このシナリオでの問題のカップルを持っている:

  • 私は考慮に 送信/読み取り操作を取ることなく接続イベントを管理する必要があります。たとえば、メッセージを送信する前に、ソケットを自動接続して を開く必要があります。
  • ドキュメントによると:大量のメッセージに対する

、 チャネルアダプタの協調のペアを使用することを検討してください。ただし、コラボレーション ロジックを提供する必要があります。

大量のシナリオでは、要求/応答ソケットにどのコンポーネントを使用する必要がありますか?

答えて

0

言葉だけからReference Manualを読む:あなたは、アウトバウンドとインバウンドのチャネルアダプタを協業のペアを設定することを検討すること(上記のようにゲートウェイを使用しての落とし穴を避ける)、大量のスループットを達成するために

このサンプルでは、​​クライアントとサーバーの両方の側に、チャネルアダプタを共同で構成する方法を示し、および対応する要求に対する応答を相関させるための一つの技術:

はまた、TCP多重Sampleに見てみましょう。

関連する問題