0

有没有办法明确告诉代理向队列分配的死信队列发送消息?

我知道我们可以配置一个队列以在一定次数的重新传递尝试后自动向 DLQ 发送消息。这对于数据库问题、网络问题等临时错误非常有意义。但是,在业务规则错误的情况下,让该消息在 X 分钟内尝试重新传递 X 次是没有意义的。当我们知道这是违反业务规则/格式错误的消息等时发送到死信队列。

我希望有一种方法,当我们发现违反业务规则时,我们可以立即将其发送到该队列死信队列。我知道我可以显式地编写代码将其发送到死信队列,但我们将有许多(数十个)可配置队列,并且它们相关的死信队列将由我们的中间件团队配置。我不想明确编码死信队列队列名称,甚至在我自己的属性中配置它们。我希望有一种简单的方法可以告诉代理立即将消息发送到死信队列而不尝试重新传递。

看起来应该是这样的message.deadLetter()。我觉得我一定错过了一些简单的东西,但我在消费者、会话或消息上看不到任何类似的机制。

4

1 回答 1

0

您在 JMS 规范中描述的功能没有任何调整。JMS 规范通过JMSRedelivered标头和JMSXDeliveryCount属性等内容结合了重新传递。然而,它实际上没有提到“死信”目的地。

也就是说,这样的功能可能由特定的 JMS 代理提供,但是由于您没有提及您正在使用的 JMS 代理实现,因此不可能说您选择的代理是否实现了这样的功能。在任何情况下,它将通过特定于实现的机制进行配置和/或调用,根据定义,该机制在代理之间是不可移植的,并且不能从 JMS API 获得。

于 2022-02-18T17:15:07.247 回答