我使用Spring的最新版本的Camel和Netty并具有以下定义:
<bean id="transformIncoming" class="com.hugin.camel.transform.IncomingMessageTransformer"/>
<from uri="netty4:tcp://127.0.0.1:8888?allowDefaultCodec=false&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字节。我该如何处理大量请求?
答案 0 :(得分:-1)
receiveBufferSize
属性仅用于UDP使用者,以配置SO_RCVBUF
套接字选项。它没有在TCP端点中使用。
你不应该依赖驼峰来实现你的协议:如果没有一个合适的解码器,就会为每个tcp帧发送一条消息,你无法保证帧大小。
您应该在Netty中实现您的协议,并生成随后由camel处理的对象。 Netty拥有通过tcp流重新组合协议所需的所有工具。