我们有一个ETL场景,我们使用resequencer。
消息以序列号到达流,重定序器使用序列号按顺序发送消息,但有时消息先前被丢弃(因为数据验证)并且没有到达重定序器。这会在序列中产生漏洞,重定序器会停止使用默认发布策略发送消息。为了避免这种情况,我们开发了一个新的SequenceTimeoutReleaseStrategy,它是来自SI的默认策略和TimeoutCountSequenceSizeReleaseStrategy之间的混合。当消息到达时,它会检查超时并在必要时释放它。
所有这些都很有效,除非在超时之前到达并且有漏洞的最后消息。此消息不是由策略发布的。我们可以使用收割机,但是序列可能在序列中有多个孔,因此当重新排序器释放它们时,它将在第一个序列中断时停止并移除丢失其余消息的组。所以,问题是:有没有办法使用重定序器,序列中可能存在漏洞?
我们已经并且希望避免的一个解决方案是使用计划任务直接从消息存储中删除消息,但这可能是并发等问题,因此我们更喜欢其他解决方案。
这里有任何帮助
此致 Guzman的
答案 0 :(得分:1)
涉及两个组成部分;发布策略说“某事”可以发布;关于发布内容的实际决定由MessageGroupProcessor
执行。在这种情况下,ResequencingMessageGroupProcessor
。
您需要自定义该类以“跳过”这些洞。
您无法使用<reseequencer/>
命名空间连接自定义MGP,您必须使用<bean/>
s - ResequencingMessageHandler
和ConsumerEndpointFactoryBean
连接。< / p>
或者使用BeanFactoryPostProcessor
将构造函数参数更改为自定义类。