根据我自己的实验(无法在任何地方找到此文档),如果2条消息具有相同的相关ID和序列号,聚合器将只接收第1条消息并丢弃/忽略其他消息。
有没有办法让聚合器使用收到的最后一条消息?
聚合会将有效负载合并为1个字符串。
简单场景: 具有相同相关ID和序列大小2的3条消息,按时间顺序排序
当前输出:abcghi
预期产出:defghi
这种情况发生在序列#2丢失时,这意味着第一条消息。并且相关ID(从解码的有效载荷获得)非常有限,因此它将被多次使用。
原始消息
原始邮件的格式为:
示例原始消息有效负载:
聚合器基本上结合了文本
答案 0 :(得分:0)
您需要使用自定义发布策略(它可以具有与默认SequenceSizeReleaseStrategy
相同的逻辑,但它不能是该类)。使用默认策略,将跳过重复序列。
但是,您还需要一个自定义消息组存储来实现您想要的行为;否则输出将为abcdefghi
。
但是,在这种情况下,丢弃的消息不会被发送到丢弃信道。
重用相关ID通常不是一个好主意;如果必须,请先使用group-timeout
或收割机丢弃部分组,然后再重新使用相关ID。
顺便说一句,您可能会发现使用自定义CorrelationStrategy
和ReleaseStrategy
更容易,而不是使用默认值并操纵标题。