如何从 MessageListener 中的 Java 读取 max-delivery-attempts 的值

How to read value of max-delivery-attempts from Java in a MessageListener

我已经在 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 并确定这是否是最后一次尝试。如果是这样,那么我自己将其移至其他队列并提供其他信息。

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

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

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