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