You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Camel 4.x.x多次调用UnitOfWork获取原始消息体返回空的问题

解决Camel 4.x.x中多次获取原始消息体为空的问题

补充配置项调整

除了你已设置的allowUseOriginalMessage,还需要添加以下配置来恢复Camel 2.x.x中重复读取原始消息体的行为:

  • Spring Boot环境:添加camel.springboot.stream-caching-enabled=true
  • Camel Main模式:添加camel.main.streamCachingEnabled=true

Camel 4.x默认采用流处理消息体,流类型的内容读取一次后就会耗尽,开启流缓存后会将消息体转为可重复读取的缓存对象,解决多次调用返回空的问题。

代码兼容方案

如果配置调整后仍有场景不生效,可以在交换的早期节点一次性缓存原始消息体,后续直接复用缓存值,避免重复调用getOriginalInMessage().getBody():

// 首次获取时缓存原始消息体到交换属性
Object originalBody = exchange.getUnitOfWork().getOriginalInMessage().getBody();
exchange.setProperty("ORIGINAL_BODY", originalBody);

// 后续需要使用时直接从属性读取
Object reusedBody = exchange.getProperty("ORIGINAL_BODY");

额外注意点

  • Camel 4.x对原始消息的处理逻辑做了内存优化,默认不再自动缓存流类型消息体,必须显式开启流缓存才能匹配2.x的行为。
  • 部分特定组件(如File、HTTP)可能有独立的流处理配置,若仍存在问题,需检查对应组件的缓存开关是否开启。

内容的提问来源于stack exchange,提问作者sturaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:09:51