Java Camel Netty TCP使用者只接收1024个字节

时间:2016-03-20 18:56:40

标签: java tcp apache-camel netty

我使用Spring的最新版本的Camel和Netty并具有以下定义:

<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请求:

@Component
public class IncomingMessageTransformer implements Processor {

public void process(Exchange in) throws Exception {
    Message inm = in.getIn();
    byte[] buf = inm.getBody(byte[].class); 

我的问题是,无论传入消息的大小如何,buf变量都不会超过1024个字节,因此我的请求被截断。

根据组件定义,receiveBufferSize应该是65536字节。我该如何处理大量请求?

1 个答案:

答案 0 :(得分:-1)

receiveBufferSize属性仅用于UDP使用者,以配置SO_RCVBUF套接字选项。它没有在TCP端点中使用。

你不应该依赖驼峰来实现你的协议:如果没有一个合适的解码器,就会为每个tcp帧发送一条消息,你无法保证帧大小。

您应该在Netty中实现您的协议,并生成随后由camel处理的对象。 Netty拥有通过tcp流重新组合协议所需的所有工具。