我想汇总交易所,当交易达到一定规模(比如20KB)时,我想将交易所标记为已关闭。
我有一个基本的实现来检查交换的大小,如果它是18KB我从我的谓词返回true。但是,如果有一个4KB的消息,而且它当前是17KB,这意味着我将在21KB这个太大的时候完成聚合。
关于如何解决这个问题的任何想法?我可以在聚合策略中执行某些操作来拒绝连接并启动新的Exchange以进行聚合吗?
我想我可以通过另一个进程来检查实际大小,从消息末尾删除消息以适应大小,并且对于每个删除的消息,将它们推回去......但这看起来有点难看,因为我有一个可能会执行的不断补偿程序。
提前感谢任何提示。
答案 0 :(得分:0)
我认为当你有17 + 4>时,你可以用一个急切的完整选项将它标记为完整。 20情况。然后它将完成17,然后用4开始一个新组。
请参阅以下文档:https://github.com/apache/camel/blob/master/camel-core/src/main/docs/eips/aggregate-eip.adoc
你也可能需要使用`PreCompleteAggregationStrategy'并在17 + 4>中返回true。 20情况,否则它将首先将它们组合在一起并完成,例如它变为21.但是通过同时使用热切的完成检查选项和此界面,您可以按照自己的意愿进行操作。