Apache camel 基于聚合消息大小的聚合策略

Apache camel 基于聚合消息大小的聚合策略,apache-camel,Apache Camel,我想汇总交易所,当交易所达到一定大小(比如20KB)时,我想将交易所标记为关闭 我有一个基本的实现来检查交换的大小,若它是18KB,我就从谓词返回true。但是,如果一条消息是4KB,而当前是17KB,这意味着我将在21KB太大时完成聚合 有没有办法解决这个问题?我可以在聚合策略中做些什么来拒绝加入并启动新的Exchange进行聚合吗 我想我可以让它通过另一个过程来检查实际大小从消息的末尾删除消息以适应大小,对于每个删除的消息,将它们推回…但这似乎有点难看,因为我有一个可能会执行的不断补偿例程

我想汇总交易所,当交易所达到一定大小(比如20KB)时,我想将交易所标记为关闭

我有一个基本的实现来检查交换的大小,若它是18KB,我就从谓词返回true。但是,如果一条消息是4KB,而当前是17KB,这意味着我将在21KB太大时完成聚合

有没有办法解决这个问题?我可以在聚合策略中做些什么来拒绝加入并启动新的Exchange进行聚合吗

我想我可以让它通过另一个过程来检查实际大小从消息的末尾删除消息以适应大小,对于每个删除的消息,将它们推回…但这似乎有点难看,因为我有一个可能会执行的不断补偿例程


提前感谢您提供的任何提示。

我认为当您遇到17+4>20的情况时,您可以使用“渴望完成”选项将其标记为完成。然后,它将完成17,并开始一个新的组与4

见以下文档:

您可能还需要使用“PreCompleteTaggregationStrategy”,并在17+4>20的情况下返回true,否则它会首先将它们组合在一起并完成,例如变为21。但是,通过使用“急切完成检查”选项和此界面,您可以随心所欲


谢谢你,克劳斯。我来看看。我必须承认,我已经有一段时间没有使用驼峰了,我很高兴再次使用驼峰来解决一些真正的EIP问题。我需要检查2.11天以来的新功能。好的,所以实现了预完成接口:
public boolean预完成(Exchange-oldchange,Exchange-newExchange){String-oldBody=oldchange.getIn().getBody(String.class);String-newBody=newExchange.getIn().getBody(String.class);return(oldBody+newBody).length()>(10*2000)?true:false;}
仅适用于此。如果新的exchange将旧的exchange设置为20k,那么它将完成聚合的exchange并创建新的exchange。我不确定我是否需要使用它。示例建议您在希望发送停止命令以强制完成聚合时使用该命令。