对于最新的稳定版本,请使用 Spring Integration 6.5.1spring-doc.cadn.net.cn

重序器

重排序器与聚合器相关,但用途不同。 当聚合器合并消息时,重排序器传递消息而不更改它们。spring-doc.cadn.net.cn

功能性

重排序器的工作方式与聚合器类似,因为它使用CORRELATION_ID以分组存储消息。 不同之处在于 Resequencer 不会以任何方式处理消息。 相反,它会按照其SEQUENCE_NUMBER标头值。spring-doc.cadn.net.cn

关于这一点,您可以选择一次释放所有消息(在整个序列之后,根据SEQUENCE_SIZE,以及其他可能性)或一旦有效序列可用。 (我们将在本章后面介绍“有效序列”的含义。spring-doc.cadn.net.cn

重排序器旨在对间隔较小的相对较短的消息序列进行重新排序。 如果有大量不相交的序列,并且存在许多间隙,则可能会遇到性能问题。

配置重排序器

请参阅聚合器和重排序器,了解在 Java DSL 中配置重排序器。spring-doc.cadn.net.cn

配置重排序器只需要在 XML 中包含适当的元素。spring-doc.cadn.net.cn

以下示例显示了重排序器配置:spring-doc.cadn.net.cn

<int:channel id="inputChannel"/>

<int:channel id="outputChannel"/>

<int:resequencer id="completelyDefinedResequencer"  (1)
  input-channel="inputChannel"  (2)
  output-channel="outputChannel"  (3)
  discard-channel="discardChannel"  (4)
  release-partial-sequences="true"  (5)
  message-store="messageStore"  (6)
  send-partial-result-on-expiry="true"  (7)
  send-timeout="86420000"  (8)
  correlation-strategy="correlationStrategyBean"  (9)
  correlation-strategy-method="correlate"  (10)
  correlation-strategy-expression="headers['something']"  (11)
  release-strategy="releaseStrategyBean"  (12)
  release-strategy-method="release"  (13)
  release-strategy-expression="size() == 10"  (14)
  empty-group-min-timeout="60000"  (15)

  lock-registry="lockRegistry"  (16)

  group-timeout="60000"  (17)
  group-timeout-expression="size() ge 2 ? 100 : -1"  (18)
  scheduler="taskScheduler" />  (19)
  expire-group-upon-timeout="false" />  (20)
1 重排序器的 id 是可选的。
2 重定序器的输入通道。 必填。
3 重排序器将重新排序的消息发送到的通道。 自选。
4 重排序器向其发送超时消息的通道(如果send-partial-result-on-timeout设置为false). 自选。
5 是发送有序序列在可用时立即发送,还是仅在整个消息组到达后发送。 自选。 (默认值为false.)
6 MessageGroupStore可用于将消息组存储在其相关键下,直到它们完成。 自选。 (默认值是易失性内存中存储。
7 在组到期时,是否应发送有序的组(即使缺少某些消息)。 自选。 (默认值为 false。 看在聚合器中管理状态:MessageGroupStore.
8 发送回复时等待的超时间隔Messageoutput-channeldiscard-channel. 仅当输出通道具有一些“发送”限制时才应用它,例如QueueChannel具有固定的“容量”。 在这种情况下,一个MessageDeliveryException被抛出。 这send-timeout被忽略AbstractSubscribableChannel实现。 为group-timeout(-expression)MessageDeliveryException从计划过期任务中,将导致重新计划此任务。 自选。
9 对实现消息关联(分组)算法的 Bean 的引用。 bean 可以是CorrelationStrategy接口或 POJO。 在后一种情况下,correlation-strategy-method属性也必须定义。 自选。 (默认情况下,聚合器使用IntegrationMessageHeaderAccessor.CORRELATION_ID标头。
10 在引用的 bean 上定义的方法correlation-strategy实现相关决策算法。 可选,有限制(需要correlation-strategy在场)。
11 表示相关策略的 SpEL 表达式。 例:"headers['something']". 只有其中一个correlation-strategycorrelation-strategy-expression是允许的。
12 对实现发布策略的 Bean 的引用。 bean 可以是ReleaseStrategy接口或 POJO。 在后一种情况下,release-strategy-method属性也必须定义。 可选(默认情况下,聚合器将使用IntegrationMessageHeaderAccessor.SEQUENCE_SIZEheader 属性)。
13 在引用的 bean 上定义的方法release-strategy并实现完成决策算法。 可选,有限制(需要release-strategy在场)。
14 表示发布策略的 SpEL 表达式。 表达式的根对象是MessageGroup. 例:"size() == 5". 只有其中一个release-strategyrelease-strategy-expression是允许的。
15 仅当MessageGroupStoreReaper<resequencer> MessageStore. 默认情况下,当MessageGroupStoreReaper配置为使部分组过期,空组也会被删除。 组正常释放后存在空组。 这是为了启用延迟到达邮件的检测和丢弃。 如果您希望空组过期的时间比过期的部分组更长的时间,请设置此属性。 然后,空组不会从MessageStore直到它们至少在这个毫秒数内没有被修改。 请注意,空组过期的实际时间也受收割器的超时属性的影响,它可以与此值加上超时一样多。
16 请参阅使用 XML 配置聚合器
17 请参阅使用 XML 配置聚合器
18 请参阅使用 XML 配置聚合器
19 请参阅使用 XML 配置聚合器
20 默认情况下,当组由于超时(或MessageGroupStoreReaper),则将保留空组的元数据。 迟到的消息将立即丢弃。 将此设置为true以完全删除该组。 然后,迟到的邮件将启动一个新组,并且在组再次超时之前不会被丢弃。 由于序列范围内的“漏洞”导致超时,新组永远不会正常释放。 空组可以稍后使用MessageGroupStoreReaperempty-group-min-timeout属性。 从 5.0 版开始,空组也会计划在empty-group-min-timeout流逝。 默认值为“false”。
由于在重排序器的 Java 类中没有要实现的自定义行为,因此没有对它的注释支持。