骆驼聚合器不聚合所有
问题描述:
我分裂一些Java对象,然后聚合。我有点困惑这个完成策略如何与骆驼(2.15.2)。我正在使用完成大小和完成超时。如果我理解正确,完成超时并没有太大的影响。因为,这里没有太多的等待。骆驼聚合器不聚合所有
总而言之,我有3000多个对象。但是,似乎只有它的一部分被汇总。但是,如果我改变完成规模值,情况会发生变化。如果大小为100,则它大约为800,如果它是200,则它总计大约为1600.但是,我不知道事物的大小,因此不能依赖于假定的数量。
任何人都可以向我解释我在这里做错了什么吗? 如果我使用eagerCheckCompletion,它集中了整个事情一次去,我不想。 下面是我的路线:
from("direct:specializeddatavalidator")
.to("bean:headerFooterValidator").split(body())
.process(rFSStatusUpdater)
.process(dataValidator).choice()
.when(header("discrepencyList").isNotNull()).to("seda:errorlogger")
.otherwise().to("seda:liveupdater").end();
from("seda:liveupdater?concurrentConsumers=4&timeout=5000")
.aggregate(simple("${in.header.contentType}"),
batchAggregationStrategy())
.completionSize(MAX_RECORDS)
.completionTimeout(BATCH_TIME_OUT).to("bean:liveDataUpdater");
from("seda:errorlogger?concurrentConsumers=4")
.aggregate(simple("${in.header.contentType}"),
batchAggregationStrategy("discrepencyList"))
.completionSize(MAX_RECORDS_FOR_ERRORS)
.completionTimeout(BATCH_TIME_OUT)
.process(errorProcessor).to("bean:liveDataUpdater");
答
奇怪,但如果你要聚集所有分割后的消息,你可以简单地使用
.split(body(), batchAggregationStrategy())
,并根据你想要的工作,你可以使用
.shareUnitOfWork().stopOnException()
感谢您的回答。但是,我想知道,我的最新错误!看来,如果我将seda端点改为直接,它就会像我预期的那样开始工作!不知道为什么! – Mashrur
制作一个简单的测试用例并发布它会有很大帮助:) – J2B
很抱歉,迟到的回复。我希望我有时间做一个简单的测试用例来证明我的观点。无论如何,看起来,应用程序运行的方式还有一些事情要做。这是在一个简单的主要类与一个固定的时间睡眠方法。而且,它也没有我稍后添加的正确完成逻辑。我会分享一些代码,如果有人认为这对他们有用。 – Mashrur