对于最新的稳定版本,请使用 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 类中没有要实现的自定义行为,因此没有对它的注释支持。 |