Apache camel CamelExchangeException exchange标头上的关联键无效

Apache camel CamelExchangeException exchange标头上的关联键无效,apache-camel,aggregate,correlation,Apache Camel,Aggregate,Correlation,Apache Camel在尝试聚合来自我的AWS SQS队列的消息时引发无效的相关键异常。 消息是使用ZipSplitt放在队列中的,它们都以匹配的“parentId”值出现在队列中(我使用随机uuid添加了这些值,作为拆分的一部分-我也尝试了CamleSourceFile)。我反复得到异常,直到重试次数用尽 我的总体表达: from(--queue--).aggregate(header("parentId"), customAggregationStrategy).completionTim

Apache Camel在尝试聚合来自我的AWS SQS队列的消息时引发无效的相关键异常。 消息是使用ZipSplitt放在队列中的,它们都以匹配的“parentId”值出现在队列中(我使用随机uuid添加了这些值,作为拆分的一部分-我也尝试了CamleSourceFile)。我反复得到异常,直到重试次数用尽

我的总体表达:

from(--queue--).aggregate(header("parentId"), customAggregationStrategy).completionTimeout(3000).processor(new Processor() {...}.to(--next queue--);
我的customAggregationStrategy或任何后续处理器都不会发出日志记录。它未能聚合:

... DeadLetterChannel - Failed delivery for (MessageId: ...). On Delivery attempt: 0 caught ...CamelExchangeException: Invalid correlation key. Exchange[ID...]
对于我的重试尝试,传递尝试为0到9


令人恼火的是,代码在除本地之外的任何地方都能工作……您认为这会缩小范围,但无论是异常还是记录的任何其他内容都不能说明这里发生了什么。

在表达相关键时,您可以尝试使用Camel简单语言,即:

.aggregate(simple("${headers.parentId}", customAggregationStrategy)
这样,异常可能会被默认忽略

您是否激活了Camel tracer()来分析您的交换并简化调试


我怀疑您有一个没有“parentId”头的交换。如果要跳过它们,只需激活
ignoreInvalidCorrelationKeys
选项(请参阅)

是否确定每个交换都有标题?你能检查一下吗?例如,将日志记录OneException块添加到路由
OneException(Throwable.class).to(“log:exceptionLogged?showAll=true”)可以肯定。如果有标头,您使用的是哪种驼峰版本?是的,标头在添加自定义标头的处理器之前和之后转储(记录)。“parentId”是在聚合之前添加的(目前它正在我们的测试环境中工作),但无论我使用的是自定义头还是Camels头(CamelFileAbsolutePath,其中包含我的zip文件)。谢谢@TacheDeChoco,我将尝试一下简单的语法。忽略InvalidCorrelationKeys可以工作,因为它不会抛出错误,但是文件没有被正确接收。因此简单语言无法工作。我认为我的环境一定有问题——因为它可以在其他环境中工作。这很疯狂,因为如果它在其他环境中没有表现出相同的行为,我不想在本地“修复”它…只是很奇怪。