ActiveMQ Artemis重新交付延迟

时间:2019-05-31 15:04:14

标签: jpa jms rollback optimistic-locking activemq-artemis

设置:

  • 我们有一个Spring Boot应用程序,该应用程序正在从ActiveMQ Artemis JMS队列中读取消息。
  • 消息正在JPA事务中处理。
  • 当有异常触发JPA中的回滚时,它还会触发Artemis中的JMS回滚,该回滚具有重新交付延迟。
  • 我们的应用程序在多个实例中并行运行,这在处理共享公共数据的多条消息时会导致乐观的锁定问题。

问题::当并行处理X条消息并且存在乐观锁定问题时,只有1条消息会通过,而其他所有消息都会随着延迟而重新安排。重新交付时,与X-1消息将在相同时间到达之前相同,这是因为延迟是相同的,并且只经历一个就导致相同的问题。

问题:有人知道增加ActiveMQ Artemis重新交付延迟时间的方法吗?

注意:我知道ActiveMQ 5.x中有一个名为collisionAvoidanceFactor的选项,但是ActiveMQ Artemis缺少该选项。

1 个答案:

答案 0 :(得分:0)

您注意到,ActiveMQ Artemis中没有collisionAvoidanceFactor的等效项。我知道没有办法以类似方式修改重新交付的延迟时间。有redelivery-delay-multiplier,但是在重新交付过程中始终执行,并且不会提供您要查找的差异。

您可以考虑使用message grouping,以使“共享公共数据的消息”被同一使用者连续使用,因此首先避免了锁定问题。

在查看了实现此功能所需的内容之后,我打开了ARTEMIS-2364。我将尽快发送请求请求,因此可能会在下一版的Artemis(即2.10)中出现。