Apache Camel 3.8 Netty消费端未等路由处理完成提前返回空响应如何解决
问题根因
你遇到的15ms提前返回空响应的问题,是Apache Camel Netty组件的requestTimeout参数默认值为15毫秒导致的:超时后Netty会直接截断业务流程,返回空响应,不会等待自定义逻辑执行完成。
解决方案
修改路由中的Netty配置,新增requestTimeout参数,设置为大于你业务最长处理耗时的数值(单位为毫秒,示例中设置为60000即1分钟)。同时建议在处理方法中显式设置响应体,避免默认取值异常。
修改后路由代码
fromF("netty:tcp://%s:%d?sync=true&synchronous=true&disconnectOnNoReply=false&connectTimeout=100000&requestTimeout=60000", host, receivePort) .bean(HL7Request.class, "process", BeanScope.Request);
优化后process方法代码
public void process(Exchange exchange) throws Exception { try { exchange.setException(null); Thread.sleep(5000); String content = exchange.getMessage().getBody(String.class); System.out.println(content); // 显式设置响应体内容,确保返回的是预期值 exchange.getMessage().setBody(content); } catch (Exception e) { exchange.setException(e); } }
验证
修改完成后重启服务,使用PacketSender发送测试请求,等待5秒后即可收到携带预期内容的响应,不会再出现提前返回空响应的问题。
内容的提问来源于stack exchange,提问作者Florian H
相关产品推荐
相关产品推荐

