ActiveMQ Artemis 重新传递延迟
ActiveMQ Artemis redelivery delay
设置:
- 我们有一个 Spring 引导应用程序,它正在从 ActiveMQ Artemis JMS 队列读取消息。
- 消息正在 JPA 事务中处理。
- 当在 JPA 中发生异常触发回滚时,它也会在设置了重新传递延迟的 Artemis 中触发 JMS 回滚。
- 我们的应用程序 运行 在多个并行实例中,这会在处理共享公共数据的多条消息时导致乐观锁定问题。
问题: 当 X 条消息并行处理并且存在乐观锁定问题时,只有 1 条消息通过,所有其他消息都会延迟重新安排。当重新传递发生时,X-1 消息将同时到达,因为延迟是相同的,并且导致相同的问题,只有一个通过。
问题:有谁知道一种方法可以增加 ActiveMQ Artemis 的重新交付延迟时间的方差?
注意:我知道在 ActiveMQ 5.x 中有一个名为 collisionAvoidanceFactor
的选项,但 ActiveMQ Artemis 中没有。
如您所见,ActiveMQ Artemis 中没有 collisionAvoidanceFactor
的等效项。我知道没有办法以类似的方式修改重新交付延迟。有 redelivery-delay-multiplier
,但它在重新交付中始终如一地强制执行,不会提供您正在寻找的差异。
您可以考虑使用 message grouping,以便 "messages that share common data" 由同一消费者连续使用,从而首先避免锁定问题。
在查看了实现此功能所需的条件后,我打开了 ARTEMIS-2364。我很快就会发送 pull-request,所以它可能会出现在下一个版本的 Artemis(即 2.10)中。
设置:
- 我们有一个 Spring 引导应用程序,它正在从 ActiveMQ Artemis JMS 队列读取消息。
- 消息正在 JPA 事务中处理。
- 当在 JPA 中发生异常触发回滚时,它也会在设置了重新传递延迟的 Artemis 中触发 JMS 回滚。
- 我们的应用程序 运行 在多个并行实例中,这会在处理共享公共数据的多条消息时导致乐观锁定问题。
问题: 当 X 条消息并行处理并且存在乐观锁定问题时,只有 1 条消息通过,所有其他消息都会延迟重新安排。当重新传递发生时,X-1 消息将同时到达,因为延迟是相同的,并且导致相同的问题,只有一个通过。
问题:有谁知道一种方法可以增加 ActiveMQ Artemis 的重新交付延迟时间的方差?
注意:我知道在 ActiveMQ 5.x 中有一个名为 collisionAvoidanceFactor
的选项,但 ActiveMQ Artemis 中没有。
如您所见,ActiveMQ Artemis 中没有 collisionAvoidanceFactor
的等效项。我知道没有办法以类似的方式修改重新交付延迟。有 redelivery-delay-multiplier
,但它在重新交付中始终如一地强制执行,不会提供您正在寻找的差异。
您可以考虑使用 message grouping,以便 "messages that share common data" 由同一消费者连续使用,从而首先避免锁定问题。
在查看了实现此功能所需的条件后,我打开了 ARTEMIS-2364。我很快就会发送 pull-request,所以它可能会出现在下一个版本的 Artemis(即 2.10)中。