1

根据我自己的实验(在任何地方都找不到此文档),如果 2 条消息具有相同的相关 ID 和序列号,聚合器将只获取第一条消息并丢弃/忽略另一条消息。

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

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

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

  • 序列号:1;有效载荷:abc
  • 序列号:1;有效载荷:定义
  • 序列#:2;有效载荷:ghi

当前输出:abcghi

预期输出:defghi

这种情况发生在序列# 2 缺失时,这意味着第一条消息。并且相关ID(从解码的有效载荷中获得)非常有限,因此会被多次使用。

原始信息

原始消息采用以下格式:

  • "序列大小","序列号","ID","文本"
  • ID 范围在 0-9 之间
  • 示例消息:2,1,8,abc

示例原始消息有效负载:

  • 2,1,8,abc
  • 2,1,8,定义
  • 2,2,8,吉

聚合器基本上结合了文本

4

1 回答 1

1

您需要使用自定义发布策略(它可以与 default 具有相同的逻辑SequenceSizeReleaseStrategy,但不能是那个类)。使用默认策略会跳过重复序列。

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

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

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

CorrelationStrategy顺便说一句,您可能会发现使用自定义而ReleaseStrategy不是使用默认值和操作标题更容易。

于 2015-05-24T15:05:16.777 回答