【问题标题】:How to read value of max-delivery-attempts from Java in a MessageListener如何在 MessageListener 中从 Java 读取 max-delivery-attempts 的值
【发布时间】:2019-09-21 15:53:51
【问题描述】:

我在 Wildfly 10 配置中配置了重新发送设置,如下所示。

<address-setting name = "jms.queue.MyQueue" 
redelivery-delay="2000" max-redelivery-delay="10000" max-delivery-attempts="5" 
max-size-bytes="10485760" address-full-policy="FAIL"/>

我还没有配置我想要自己做的 DLQ。 当消息失败时,我想将其移动到包含错误的某个队列。不幸的是,如果我配置了 DLQ,我只会得到原始消息,但不会得到失败的原因。

为此,我想阅读 JMSXDeliveryCount 并确定这是否是最后一次尝试。如果是这样,请自行将其移至其他队列并提供其他信息。

是否可以在使用消息时从我的队列中读取在standalone-full.xml 中完成的原始设置?

【问题讨论】:

  • 如果您的消费者未能处理该消息,是什么让您有信心将消息发送到 DLQ?由于崩溃或网络问题阻止消费者将消息发送到 DLQ,消费者可能无法处理消息。

标签: wildfly wildfly-10 activemq-artemis


【解决方案1】:

max-delivery-attempts 设置未在 JMS 规范中定义,因此为了从服务器检索它,您需要使用 Wildfly 管理 API。有几种方法可以做到这一点 - nativeHTTP。需要明确的是,这将使您的应用程序难以移植到其他潜在的 JMS 提供程序和/或 Java 应用程序服务器。

为避免必须使用 Wildfly 管理 API,您可以考虑在来自生产者的消息上设置一个特殊属性,以指示应该传递多少次。然后您可以在您的消费者应用程序中读取此属性并将其与JMXSDeliveryCount 进行比较。如果您不想更改生产者应用程序,您可以使用 Artemis 传出拦截器在消息传递给消费者时设置消息的属性来完成同样的事情。

【讨论】:

  • 谢谢贾斯汀。我可以使用这种方法来解决我的问题。
猜你喜欢
  • 2013-05-24
  • 2021-07-15
  • 1970-01-01
  • 2021-10-30
  • 2017-09-01
  • 1970-01-01
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多