[英]Apache Camel, Netty4 endpoint as client - memory leakage
我对Apache Camel并不陌生,并试图将一些路线付诸实践。 我有一个TCP服务器,该服务器提供大型JSON消息(最大大小约为30-50kB,其中我对源大小没有任何控制权),其中包含很多测量数据,我想使用某些有效的附加路由进行处理精细。 我在spring-boot环境1.5.7中使用骆驼2.20。 我遇到的问题是,如果我注释掉除传入的减少的netty4路由(仅往返于计数器)之外的所有其他路由,请参见下文
@Bean
public RouteBuilder getRoute() {
String fromSource = String.format("netty4:tcp://%s:%d?clientMode=true&textline=true&receiveBufferSize=64000&decoderMaxLineLength=64000",sourceIp,sourcePort);
return new RouteBuilder() {
from(fromSource)
.to("metrics:counter:incomingCounter");
};
}
该路由几乎可以正常工作,但是会消耗越来越多的堆空间(每秒约2MB,其中消息以大约20-30Hz的频率提供服务),直到java抛出java.lang.OutOfMemoryError:Java堆空间。
如果没有任何路由,则不会记录任何内存泄漏,因为我可以将问题集中在netty-route上
任何帮助将不胜感激。 提前致谢。
我自己通过调试代码找到了解决方案。 我忘了在netty4-camel端点中设置属性sync = false ,因为我不想处理消息并在处理后将答案发送回服务器,只是消耗-而sync = true(默认设置)会缓冲所有传入数据以供以后使用引起我的“内存泄漏”的响应。 从netty4-camel文档( http://camel.apache.org/netty4.html )中,“ sync”的行为尚不完全清楚-我将建议对该文档进行改进(将写有建议的邮件)使用法更加清楚。
也许这可以帮助另一个遇到类似问题的人。
最好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.