此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Integration 6.5.1! |
重序器
重排序器与聚合器相关,但用途不同。当聚合器合并消息时,重排序器传递消息而不更改它们。
功能性
重排序器的工作方式与聚合器类似,因为它使用CORRELATION_ID
将消息存储在组中。不同之处在于 Resequencer 不会以任何方式处理消息。相反,它会按照其SEQUENCE_NUMBER
标头值。
关于这一点,您可以选择一次释放所有消息(在整个序列之后,根据SEQUENCE_SIZE
,以及其他可能性)或一旦有效序列可用。(我们将在本章后面介绍“有效序列”的含义。
重排序器旨在对间隔较小的相对较短的消息序列进行重新排序。如果您有大量具有许多间隙的不相交序列,则可能会遇到性能问题。 |
配置重排序器
请参阅聚合器和重排序器,了解在 Java DSL 中配置重排序器。
配置重排序器只需要在 XML 中包含适当的元素。
以下示例显示了重排序器配置:
<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 | 发送回复时等待的超时间隔Message 到output-channel 或discard-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-strategy 或correlation-strategy-expression 是允许的。 |
12 | 对实现发布策略的 Bean 的引用。Bean 可以是ReleaseStrategy 接口或 POJO。在后一种情况下,release-strategy-method 属性。可选(默认情况下,聚合器将使用IntegrationMessageHeaderAccessor.SEQUENCE_SIZE header 属性)。 |
13 | 在引用的 bean 上定义的方法release-strategy 实现完成决策算法。可选,有限制(需要release-strategy 在场)。 |
14 | 表示发布策略的 SpEL 表达式。表达式的根对象是MessageGroup . 例:"size() == 5" . 只有其中一个release-strategy 或release-strategy-expression 是允许的。 |
15 | 仅当MessageGroupStoreReaper 为<resequencer> MessageStore . 默认情况下,当MessageGroupStoreReaper 配置为使部分组过期,空组也会被删除。在组正常释放后,空组存在。这是为了启用对延迟到达邮件的检测和丢弃。如果您希望空组过期的时间比过期的部分组更长的时间表,请设置此属性。然后,空组不会从MessageStore 直到它们至少在这个毫秒数内没有被修改。
请注意,空组过期的实际时间也受收割器的超时属性的影响,它可以与此值加上超时一样多。 |
16 | 请参阅使用 XML 配置聚合器。 |
17 | 请参阅使用 XML 配置聚合器。 |
18 | 请参阅使用 XML 配置聚合器。 |
19 | 请参阅使用 XML 配置聚合器。 |
20 | 默认情况下,当组由于超时(或MessageGroupStoreReaper ),则将保留空组的元数据。
迟到的消息将立即丢弃。
将此设置为true 以完全删除该组。
然后,迟到的邮件将启动一个新组,并且在组再次超时之前不会被丢弃。
由于序列范围内的“漏洞”导致超时,新组永远不会正常释放。
空组可以稍后使用MessageGroupStoreReaper 与empty-group-min-timeout 属性。
从 5.0 版开始,空组也会计划在empty-group-min-timeout 流逝。
默认值为“false”。 |
另请参阅聚合器过期组了解更多信息。
由于在重排序器的 Java 类中没有要实现的自定义行为,因此没有对它的注释支持。 |