2016-03-20 19 views
2

を受けた私は春とラクダと網状の最新バージョンを使用して定義の下に持っています:JavaのキャメルネッティーTCPの消費者だけで1024バイト

<bean id="transformIncoming" class="com.hugin.camel.transform.IncomingMessageTransformer"/> 
<from uri="netty4:tcp://127.0.0.1:8888?allowDefaultCodec=false&amp;encoder=#byteArrayEncoder"/> 

<route> 
<transform> 
    <method ref="transformIncoming" method="process"></method> 
</transform> 

を私は、着信TCP要求を処理するためのクラスを定義した:

私の問題は、着信メッセージのサイズに関係なく、buf変数は決して1024バイトを超えないため、私の要求は切り捨てられます。

コンポーネント定義によると、receiveBufferSizeは65536バイトとされています。大きなリクエストを処理するにはどうすればよいですか?

+0

「メッセージ」とはどういう意味ですか?何らかのメッセージプロトコルを使用していますか?メッセージを受け取るコードはどこにあると思いますか? –

答えて

-1

receiveBufferSizeプロパティはUDPコンシューマでのみ使用され、SO_RCVBUFソケットオプションを構成します。 TCPエンドポイントでは使用されません。

あなたのプロトコルを実装するためにラクダに頼るべきではありません。適切なデコーダがなければ、各tcpフレームごとにメッセージが送信され、フレームサイズの保証はできません。

あなたのプロトコルをNettyで実装し、オブジェクトを生成してから、それをラクダで処理する必要があります。 Nettyには、あなたのプロトコルをTCPストリームで再構成するのに必要なすべてのツールがあります。