Spring integration 分缝上有孔的重排序器

Spring integration 分缝上有孔的重排序器,spring-integration,Spring Integration,我们有一个ETL场景,其中我们使用重排序器 消息到达流时带有一个序列号,重排序器使用该序列号按顺序发送消息,但有时消息以前会被丢弃(因为数据验证),而不会到达重排序器。这会在序列中产生漏洞,重排程序会停止使用默认的释放策略发送消息。为了避免这种情况,我们开发了一种新的SequenceTimeoutReleaseStrategy,它是来自SI的默认策略和TimeoutCountSequenceSizeReleaseStrategy的混合。当消息到达时,它会检查超时,并在必要时释放超时 所有这些都很

我们有一个ETL场景,其中我们使用重排序器

消息到达流时带有一个序列号,重排序器使用该序列号按顺序发送消息,但有时消息以前会被丢弃(因为数据验证),而不会到达重排序器。这会在序列中产生漏洞,重排程序会停止使用默认的释放策略发送消息。为了避免这种情况,我们开发了一种新的SequenceTimeoutReleaseStrategy,它是来自SI的默认策略和TimeoutCountSequenceSizeReleaseStrategy的混合。当消息到达时,它会检查超时,并在必要时释放超时

所有这些都很有效,除非最后一条消息在超时之前到达并且有漏洞。该策略不会发布此消息。我们可以使用收割机,但序列中可能有多个孔,因此当重排序器释放它们时,它将在第一个序列中断时停止,并删除丢失其余消息的组。所以,问题是:有没有一种方法可以在序列中可能存在漏洞的情况下使用重排序器

我们拥有并希望避免的一种解决方案是使用调度任务直接从消息存储中删除消息,但这可能是并发性等方面的问题,因此我们更喜欢其他解决方案

在此感谢您的帮助

问候
古兹曼

涉及两个组成部分;发布策略说“某物”可以发布;发布内容的实际决定由
MessageGroupProcessor
执行。在这种情况下,
重新排序MessageGroupProcessor

您需要自定义该类以“跳过”孔

您不能使用
命名空间连接自定义MGP,您必须使用
s-a
resequentingMessageHandler
ConsumerdPointFactoryBean
进行连接


或者使用
BeanFactoryPostProcessor
将构造函数参数更改为自定义类。

感谢您的快速回答!很抱歉,但使用这种方法,您如何知道这是一个漏洞而不是延迟传入的消息?对于由组超时或收割机释放的组,默认情况下标记为完成。因此,迟到的司机将被立即丢弃。更复杂的是,当使用自定义发布策略和
MGP
时,您可以向组中添加一条“标记”消息以保持自定义状态(或在其他地方保持该状态)。组超时的问题是,如果与消息存储的连接失败(例如在getMessage上),组从未完成,因为不需要任何消息。我们想要的是完成组AD。组超时的问题是,如果到消息存储的连接失败(例如在getMessage上),组将永远不会完成,因为预期不会有更多消息。我们想要的是在超时后完成组,并在消息存储连接错误的情况下具有容错能力。你能给我更多关于这个标记消息的细节吗?我如何使用它?还有,是否可以使用组超时而不丢弃延迟的arriver?