在Spring

时间:2015-05-24 01:17:18

标签: spring sequence spring-integration correlation aggregator

根据我自己的实验(无法在任何地方找到此文档),如果2条消息具有相同的相关ID和序列号,聚合器将只接收第1条消息并丢弃/忽略其他消息。

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

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

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

  • 序列#:1;有效载荷:abc
  • 序列#:1;有效载荷:def
  • 序列#:2;有效载荷:ghi

当前输出:abcghi

预期产出:defghi

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

原始消息

原始邮件的格式为:

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

示例原始消息有效负载:

  • 2,1,8,ABC
  • 2,1,8,DEF
  • 2,2,8,GHI

聚合器基本上结合了文本

1 个答案:

答案 0 :(得分:0)

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

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

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

重用相关ID通常不是一个好主意;如果必须,请先使用group-timeout或收割机丢弃部分组,然后再重新使用相关ID。

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