gpt4 book ai didi

java - 带有 completionTimeout 的 Camel completionSize 在 JUnit 中无法正常工作

转载 作者:行者123 更新时间:2023-11-30 08:34:07 24 4
gpt4 key购买 nike

我有这样一个文件

line1
line2
line3
line4
line5
line6
line7
line8

还有这样的路线:

.from("direct:start")
.split().tokenize("\r\n").streaming()
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
System.out.println("Splitter:" +
exchange.getIn().getBody(String.class));
}
})
.aggregate(constant(true), new MyAggregationStrategy())
.completionSize(3).completionTimeout(10000)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
int size = exchange.getIn().getBody(Set.class).size();
System.out.println("Processor, Set size:" + size);
}
})
.to("mock:end")

MyAggregationStrategy 创建一个包含 3 个项目的集合。这适用于前 6 行,我得到如下输出:

Splitter:line 1
Splitter:line 2
Splitter:line 3
...
Processor, Set size:3
...
Splitter:line 4
Splitter:line 5
Splitter:line 6
...
Processor, Set size:3
...
Splitter:line 7
Splitter:line 8

虽然第 7 行和第 8 行在 MyAggregationStrategy 的 oldExchange 中聚合,但之后定义的处理器永远不会为它们调用。 completionTimeout 也不起作用。该代码立即终止,并且不会为不存在的第 9 行等待 10 秒。

有什么想法吗?我认为这是处理不满足 completionSize 的剩余行的推荐方法?

因为我们绑定(bind)到 Java 6,所以我们使用 camel 版本 2.13.4。

最佳答案

找到答案了!

JUnit 中出现的问题仅导致 finish.assertIsSatisfied() 被立即执行,而不是等待 completionTimeout 中给出的超时。

使用 finish.assertIsSatisfied(long timeoutForEmptyEndpoints) 值高于 completionTimeout 中给出的值解决了我的问题

关于java - 带有 completionTimeout 的 Camel completionSize 在 JUnit 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39062000/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com