Apache camel 删除初始时间的驼峰重排序器

Apache camel 删除初始时间的驼峰重排序器,apache-camel,Apache Camel,我在“流”模式下使用Camels重新排序器,以确保文件以正确的顺序处理 .resequence(new MySequencingExpression()).stream().timeout(60000)) 超时时间必须以分钟为单位,因为我们偶尔会收到完全无序的文件 当我运行这个程序时,我注意到对第一个文件的处理将延迟超时时间,这对我们来说是完全不可接受的 检查完代码后,会出现初始延迟,因为代码实际上是试图将第一个文件与其不存在的前一个文件进行比较,然后超时。它应该做的是类似于“在上一个超时期间

我在“流”模式下使用Camels重新排序器,以确保文件以正确的顺序处理

.resequence(new MySequencingExpression()).stream().timeout(60000))
超时时间必须以分钟为单位,因为我们偶尔会收到完全无序的文件

当我运行这个程序时,我注意到对第一个文件的处理将延迟超时时间,这对我们来说是完全不可接受的

检查完代码后,会出现初始延迟,因为代码实际上是试图将第一个文件与其不存在的前一个文件进行比较,然后超时。它应该做的是类似于“在上一个超时期间我是否有一个文件,如果有,它是否是正确的前置文件?”

有什么解决办法吗

谢谢


Richard

这不是错误,请参阅重新排序引擎

如果最后交付的元素为空,即重新排序器为新的 创建的第一个到达元素在任何时间都需要超时毫秒 准备好交付的案例

关于你的评论:


给出序列1,2,3,4,并假设1和2已经到达 此时代码可以开始处理

如果1和2之后是0呢


我认为如果开发人员允许用户设置第一个期望值就太好了,因为通常我们知道它是什么,这样可以在重新排序程序启动时节省不必要的延迟,但我认为目前不可能。

我认为这是预期的功能。您可能需要检查是否需要使用重排序器或其他方法。状态:“序列号为3的消息具有序列号为2的前置消息和序列号为4的后续消息。消息序列2、3、5存在间隙,因为缺少3的后续消息。因此,重排序器必须保留消息5,直到消息4到达(或发生超时)。”这不是你所期望的吗?如果第二条消息在序列中较早出现,则它将保留第一条消息,直到超时或第二条消息到达。给出序列1、2、3、4,并给出1和2已到达-此时代码可以开始处理。当前,代码等待IMHO看起来像一个bug的超时时间。。。