我已经将 JBoss 4.x 上的旧版 EJB 2.x 迁移到 WildFly 17.x 上的 JPA/EJB3。 我的应用程序依赖于 JMS 重新传递计数来执行某些消息传递顺序。
在 JBoss 4.x 中,我曾经通过 JMS 消息中的JMS_JBOSS_REDELIVERY_COUNT
属性查询重新传送计数。
在 WildFly 中,没有关于 JMS 重新交付计数的信息可用。 WildFly如何跟踪重新交付计数,是否有通过财产或其他东西访问它的规定?
Wildfly 17.x使用ActiveMQ Artemis作为JMS实现。您可以使用标准的 JMS 消息头JMSXDeliveryCount
而不是特定于实现的JMS_JBOSS_REDELIVERY_COUNT
。JMS 2 规范的第 3.5.11 节这样描述JMSXDeliveryCount
:
当客户机收到消息时,必需的 JMS 定义的消息属性
JMSXDeliveryCount
将设置为消息传递的次数。第一次收到消息时,它将设置为 1,因此值为 2 或更大表示消息已重新传递。如果设置了
JMSRedelivered
邮件头值,则JMSXDeliveryCount
属性必须始终为 2 或更大。有关JMSRedelivered
消息标头的更多信息,请参见第 3.4.7 节"JMSRedelivered",
JMSXDeliveryCount
属性的目的是允许使用应用程序识别是否重复重新传递特定消息并采取适当的操作。不保证
JMSXDeliveryCount
属性的值完全正确。JMS 提供程序不应保留此值,以确保在发生故障时不会丢失其值。
需要明确的是,ActiveMQ Artemis可以使用以下配置来保持传递计数:
<persist-delivery-count-before-delivery>true</persist-delivery-count-before-delivery>
但是,默认情况下false
此值,不建议使用true
,因为它会降低性能。有关更多详细信息,请阅读文档(向下滚动到"传递计数持久性"部分(。