Spring integration 直接消息通道,但仍获得乐观锁定异常

Spring integration 直接消息通道,但仍获得乐观锁定异常,spring-integration,Spring Integration,给定帐户ID和SomeLUW,另一个LUW(工作逻辑单元),其中帐户在两个LUW中更新 当我尝试执行以下操作时: SomeLUW luw1 = new SomeLUW(accountId); messagingTemplate.send(channel1, new GenericMessage<>(luw1)); AnotherLUW luw2 = new AnotherLUW (accountId); messagingTemplate.send(channel2, new Ge

给定帐户ID和SomeLUW,另一个LUW(工作逻辑单元),其中帐户在两个LUW中更新

当我尝试执行以下操作时:

SomeLUW luw1 = new SomeLUW(accountId);
messagingTemplate.send(channel1, new GenericMessage<>(luw1));

AnotherLUW luw2 = new AnotherLUW (accountId);
messagingTemplate.send(channel2, new GenericMessage<>(luw2));
在日志中,我只能找到一个线程(典型的SIDefaultMessageListenerContainer-1

我有一个errorHandler,它使JMS代理重新提交,但是日志被异常污染


你知道为什么会这样吗?

好吧,因为你的进程是从
DefaultMessageListenerContainer
开始的,这对你来说确实可能是一个事实,一些消息是在不同的线程中处理的。因此,这是平行的

是的,这是一个连续的过程,但是当所有的事情都在同一个线程中完成时


考虑使用
DefaultLockRegistry
来获取对资源的相互访问。我猜在你的例子中是JPA。

好吧,因为你的过程是从
DefaultMessageListenerContainer
开始的,这对你来说确实可能是一个事实,一些消息是在不同的线程中处理的。因此,这是平行的

是的,这是一个连续的过程,但是当所有的事情都在同一个线程中完成时


考虑使用
DefaultLockRegistry
来获取对资源的相互访问。我猜你的情况是JPA。

如何使用DefaultLockRegistry。我试图找到任何例子,但我找不到任何你可以看的。但一般用途是:通过一些
从注册表中获取锁,在过程中将其锁定,最后解锁,就像普通的锁一样。唯一的区别是,不同的键不会在那里被阻止。我如何使用DefaultLockRegistry。我试图找到任何例子,但我找不到任何你可以看的。但一般用途是:通过一些
从注册表中获取锁,在过程中将其锁定,最后解锁,就像普通的锁一样。唯一的区别是,不同的关键点不会阻止您。
MessageChannels.direct()
    .datatype(AnotherLUW.class)
    .get();
MessageChannels.direct()
    .datatype(RedemptionLUW.class)
    .get();