Java Camel Netty TCP 消费者仅接收 1024 字节

标签 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 字节。如何处理大量请求?

最佳答案

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/

相关文章:

python - 使用 python 登录网站(特别是 netflix)

json - Camel Route/ActiveMQ 解码 JSON 并发送到方法

java - 如何在不同 Camel 路线上的方法之间共享对象

java - 如何使用 Camel 2.17+ 配置 Jetty SSL 连接器

java - java 编译器对于类定义中对该类的引用做了什么?

java - 正则表达式 : repeated concrete digit var vs repeated any digit var (Java)

java - JAR 与 JDBC 连接

Node.js - 如何跟踪连接的套接字对象? (TCP)

java - Android Webview 不加载 url

c# - 如何将原始电子邮件字符串解析为 System.Net.Mail.MailMessage 对象?