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

时间:2019-05-03 06:02:56

标签: wildfly wildfly-10 activemq-artemis

我已经在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并确定这是否是最后一次尝试。如果是这样,则将其与其他信息一起移到其他队列中。

是否可以在使用消息的同时从Queue中读取standalone-full.xml中所做的原始设置?

1 个答案:

答案 0 :(得分:1)

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

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