此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

在许多情况下,针对某些上下文(甚至单个消息)的操作必须以排他性方式执行。 一个例子是聚合器组件,我们必须检查当前消息的消息组状态,以确定我们是否可以释放该组或仅添加该消息以供将来考虑。 为此,Java 提供了一个带有实现的 API。 但是,当应用程序在群集中分布和/或运行时,问题会变得更加复杂。 在这种情况下,锁定具有挑战性,需要一些共享状态及其特定方法来实现排他性要求。java.util.concurrent.locks.LockSpring中文文档

Spring Integration 提供了一个抽象,其中包含基于 API 的内存中实现。 该方法需要特定上下文。 例如,聚合器使用 a 来锁定其组周围的操作。 这样,可以同时使用不同的锁。 此方法返回一个实例(取决于实现),因此逻辑的其余部分与标准 Java 并发算法相同。LockRegistrtyDefaultLockRegistryReentrantLockobtain(Object)LockRegistrtylock keycorrelationKeyobtain(Object)java.util.concurrent.locks.LockLockRegistrySpring中文文档

从版本 6.2 开始,提供了一个 API(此接口中的方法)在锁定时执行某些任务。 此 API 的行为类似于众所周知的 ,或 。 以下示例演示了此 API 的用法:LockRegistryexecuteLocked()defaultJdbcTemplateJmsTemplateRestTemplateSpring中文文档

LockRegistry registry = new DefaultLockRegistry();
...
registry.executeLocked("someLockKey", () -> someExclusiveResourceCall());

该方法从任务调用中重新引发异常,并引发 if is interrupted。 此外,带有 throws 的变体 when 返回 .InterruptedExceptionLockDurationjava.util.concurrent.TimeoutExceptionlock.tryLock()falseSpring中文文档

Spring Integration 为分布式锁提供了以下实现:LockRegistrtySpring中文文档

Spring Integration AWS 扩展还实现了 .DynamoDbLockRegistrySpring中文文档