当前位置: 首页 > 知识库问答 >
问题:

ActiveMQ Artemis重新交付延迟

有骏祥
2023-03-14

设置:

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

问题:当X消息被并行处理并且存在乐观锁定问题时,只有一个消息通过,并且所有其他消息都被延迟重新调度。当重新传送发生时,X-1消息将与之前相同的时间到达,因为延迟是相同的,并且只通过一个消息就会导致相同的问题。

问:有没有人知道一种方法来增加ActiveMQ Artemis的重新交付延迟时间的方差?

注意:我知道ActiveMQ 5中有一个选项。x称为冲突避免因子,但ActiveMQ Artemis中缺少它。

共有1个答案

充小云
2023-03-14

正如您所注意到的,在ActiveMQ Artemis中没有等效的碰撞避免因素。我知道没有办法以类似的方式修改退货延迟。有一个重新交付-延迟-乘数,但它是在重新交付中一致执行的,不会提供您正在寻找的方差。

您可以考虑使用消息分组,以便“共享公共数据的消息”由同一个用户串行地消耗,因此首先避免了锁定问题。

在看了实现这个功能需要什么之后,我打开了ARTEMIS-2364。我很快就会发送一个拉取请求,所以它可能会在Artemis的下一个版本中(即Artemis)。2.10)。

 类似资料:
  • 我有一个带有。RecipientList()的动态终结点,我希望在发生异常时更改终结点。下面是我的例子:

  • 我正在使用: SpringBoot 2.0.4 ActiveMQ 5.15.5 Apache Camel 2.22.0 Java1.8 太棒了 马文 基本上,我有一个带有Apache Camel路由的SpringBoot应用程序,它使用来自ActiveMQ的消息和事务。我需要在ActiveMQ上设置一个Re的策略,所以当处理中发生错误时,消息会被重试多次。 我已经用bean为ActiveMQ创建了

  • 我试图让Camel使用退避重发策略重试一个msg到JMS(实际上是MQ over JMS)。以下是我得到的: 我对这里应该发生的事情的理解是,初始超时将是1000ms。之后,骆驼将等待2000ms,然后4000ms,等等,直到我们到达30000ms。 正在发生的是,消息被重试,但每次重试1000ms。 我可能需要在上面的代码中更改什么才能得到我要寻找的结果? TIA

  • 谁能解释一下ActiveMQ重新交付策略实际上是如何工作的?它是在客户端还是在服务器端工作? 假设我有一个重新传递策略,每次尝试之间间隔30分钟,重新传递消息长达10分钟,那么失败的消息到底在哪里? 假设消息现在失败了,30分钟后重新发送,那么消息在哪里? http://activemq.apache.org/redelivery-policy.html http://activemq.apach

  • 我正在使用ActiveMQ Artemis 2.17和Spring Boot 2.5.7。我正在发布关于主题和队列的消息并使用它。所有这些都是通过JMS完成的。所有队列(选播或多播)都是耐用的。我的主题(多播地址)有两个持久队列,以便有两个独立的使用者。在我的主题中,这两个消费者使用持久和共享订阅(JMS 2.0)。所有处理都是事务性的,通过Atomikos事务管理器进行管理(我需要它来提交数据库