我在 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 字节。如何处理大量请求?
最佳答案
receiveBufferSize
属性仅在 UDP 消费者中使用,以配置 SO_RCVBUF
套接字选项。它不在 TCP 端点中使用。
你不应该依赖 camel 来实现你的协议(protocol):没有合适的解码器,每个 tcp 帧都会发送一条消息,你无法保证帧的大小。
你应该在 Netty 中实现你的协议(protocol),并生成对象,然后由 camel 处理。 Netty 拥有通过 tcp 流重组协议(protocol)所需的所有工具。
关于Java Camel Netty TCP 消费者仅接收 1024 字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36118098/