覆盖 Spring 中具有相同关联 ID 和序列号的消息

Overwriting Messages with Same Correlation ID and Sequence Number in Spring

根据我自己的实验(无法在任何地方找到此记录),如果 2 条消息具有相同的相关 ID 和序列号,聚合器将只接收第一条消息,discard/ignore 另一条消息。

有没有办法让聚合器使用收到的最后一条消息?

聚合会将负载合并为 1 个字符串。

简单场景: 3 条具有相同相关 ID 且序列大小为 2 的消息,按接收时间排序

当前输出:abcghi

预期输出:defghi

当缺少用于第一条消息的序列#2 时会发生这种情况。并且相关ID(从解码的payload中获得)非常有限,因此会被多次使用。

原始消息

原始消息采用以下格式:

示例原始消息负载:

聚合器基本上结合了文本

你需要使用自定义的发布策略(可以和默认的SequenceSizeReleaseStrategy逻辑相同,但不能是class)。使用默认策略会跳过重复序列。

但是,您还需要一个自定义消息组存储来实现您想要的行为;否则输出将是 abcdefghi.

但是在这种情况下,丢弃的消息不会被发送到丢弃通道。

重复使用关联 ID 通常不是一个好主意;如果必须,请使用 group-timeout 或收割机在任何可能重用相关 ID 之前丢弃部分组。

顺便说一句,您可能会发现使用自定义 CorrelationStrategyReleaseStrategy 比使用默认值和操纵 headers.

更容易