重排序器与聚合器相关,但用途不同。 当聚合器合并消息时,重排序器在不更改消息的情况下传递消息。Spring中文文档

功能性

重排序器的工作方式与聚合器类似,从某种意义上说,它使用 将消息存储在组中。 不同之处在于 Resequencer 不会以任何方式处理消息。 相反,它会按标头值的顺序释放它们。CORRELATION_IDSEQUENCE_NUMBERSpring中文文档

关于这一点,您可以选择一次发布所有消息(在整个序列之后,根据 和其他可能性)或在有效序列可用时立即发布。 (我们将在本章后面介绍“有效序列”的含义。SEQUENCE_SIZESpring中文文档

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

配置重排序器

请参阅聚合器和重排序器,了解如何在 Java DSL 中配置重排序器。Spring中文文档

配置重排序器只需要在 XML 中包含相应的元素。Spring中文文档

以下示例显示了重排序器配置:Spring中文文档

<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-timeoutfalse
5 是在整个消息组到达后立即发送有序序列,还是仅在整个消息组到达后发送。 自选。 (默认值为 .)false
6 对 a 的引用,可用于将消息组存储在其相关键下,直到它们完成。 自选。 (默认值为易失性内存中存储。MessageGroupStore
7 在组到期时,是否应发送有序的组(即使缺少某些消息)。 自选。 (默认值为 false。 请参阅管理聚合器中的状态:MessageGroupStore
8 向 或 发送回复时要等待的超时间隔。 仅当输出通道具有某些“发送”限制(例如具有固定“容量”)时,才应用它。 在本例中,将抛出 a。 对于实现,将忽略 。 对于 ,来自已计划的过期任务会导致重新计划此任务。 自选。Messageoutput-channeldiscard-channelQueueChannelMessageDeliveryExceptionsend-timeoutAbstractSubscribableChannelgroup-timeout(-expression)MessageDeliveryException
9 对实现消息关联(分组)算法的 Bean 的引用。 Bean 可以是接口的实现,也可以是 POJO。 在后一种情况下,还必须定义属性。 自选。 (默认情况下,聚合器使用标头。CorrelationStrategycorrelation-strategy-methodIntegrationMessageHeaderAccessor.CORRELATION_ID
10 在所引用的 Bean 上定义并实现相关决策算法的方法。 可选,但有限制(需要在场)。correlation-strategycorrelation-strategy
11 表示相关策略的 SpEL 表达式。 例:。 只允许使用其中之一。"headers['something']"correlation-strategycorrelation-strategy-expression
12 对实现发布策略的 Bean 的引用。 Bean 可以是接口的实现,也可以是 POJO。 在后一种情况下,还必须定义属性。 可选(默认情况下,聚合器将使用 header 属性)。ReleaseStrategyrelease-strategy-methodIntegrationMessageHeaderAccessor.SEQUENCE_SIZE
13 在所引用的 Bean 上定义并实现完成决策算法的方法。 可选,但有限制(需要在场)。release-strategyrelease-strategy
14 表示发布策略的 SpEL 表达式。 表达式的根对象是 . 例:。 只允许使用其中之一。MessageGroup"size() == 5"release-strategyrelease-strategy-expression
15 仅当为 . 默认情况下,当 a 配置为使部分组过期时,也会删除空组。 正常释放组后,存在空组。 这是为了能够检测和丢弃延迟到达的邮件。 如果希望空组的过期时间比过期分部组的时间更长,请设置此属性。 然后,空组不会从中删除,直到它们至少在此毫秒数内未被修改。 请注意,空组过期的实际时间也受收割者的超时属性的影响,它可能与此值加上超时一样多。MessageGroupStoreReaper<resequencer>MessageStoreMessageGroupStoreReaperMessageStore
16 请参阅使用 XML 配置聚合器
17 请参阅使用 XML 配置聚合器
18 请参阅使用 XML 配置聚合器
19 请参阅使用 XML 配置聚合器
20 默认情况下,当组因超时(或超时)而完成时,将保留空组的元数据。 迟到的消息会立即被丢弃。 设置为可完全删除该组。 然后,迟到的消息会启动一个新组,并且在组再次超时之前不会被丢弃。 由于序列范围中的“漏洞”导致超时,新组永远不会正常释放。 空组可以稍后通过与属性一起使用而过期(完全删除)。 从版本 5.0 开始,空组也计划在到期后删除。 默认值为“false”。MessageGroupStoreReapertrueMessageGroupStoreReaperempty-group-min-timeoutempty-group-min-timeout

有关更多信息,另请参阅聚合器过期组Spring中文文档

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