Java JMS - 将消息显式发送到死信队列
Java JMS - Send message to Dead Letter Queue explicitly
有没有办法明确告诉代理发送消息到队列的分配死信队列?
我知道我们可以配置一个队列,在一定次数的重新传递尝试后自动将消息发送到 DLQ。这对于数据库问题、网络问题等暂时性错误非常有意义。但是,在业务规则错误的情况下,让该消息在 X 分钟内尝试重新传递 X 次是没有意义的当我们知道这是违反业务规则/格式错误的消息等时发送到死信队列
我希望有一种方法,当我们发现违反业务规则时,我们可以立即将其发送到死信队列。我知道我可以明确地编写代码将它发送到那个死信队列,但我们将有许多(几十个)可配置队列,它们相关的死信队列将由我们的中间件团队配置。我不想明确编码死信队列队列名称,甚至不想在我自己的属性中配置它们。我希望有一种简单的方法可以告诉代理立即将消息发送到死信队列,而不是尝试重新传递。
好像应该是message.deadLetter()
。我觉得我一定遗漏了一些简单的东西,但我在消费者、会话或消息上没有看到任何类似的机制。
您在 JMS 规范中描述的功能没有适应性。 JMS 规范通过 JMSRedelivered
header 和 JMSXDeliveryCount
属性 等方式合并了重新传递。但是,它实际上没有提到“dead-letter”目的地。
也就是说,这样的功能 可能 由特定的 JMS 代理提供,但由于您没有提及您正在使用的 JMS 代理实现,因此无法确定是否您选择的经纪人实现了这样的功能。在任何情况下,它都将被配置为 and/or 通过 implementation-specific 机制调用,根据定义,该机制在代理之间 non-portable 并且无法从 JMS API.
有没有办法明确告诉代理发送消息到队列的分配死信队列?
我知道我们可以配置一个队列,在一定次数的重新传递尝试后自动将消息发送到 DLQ。这对于数据库问题、网络问题等暂时性错误非常有意义。但是,在业务规则错误的情况下,让该消息在 X 分钟内尝试重新传递 X 次是没有意义的当我们知道这是违反业务规则/格式错误的消息等时发送到死信队列
我希望有一种方法,当我们发现违反业务规则时,我们可以立即将其发送到死信队列。我知道我可以明确地编写代码将它发送到那个死信队列,但我们将有许多(几十个)可配置队列,它们相关的死信队列将由我们的中间件团队配置。我不想明确编码死信队列队列名称,甚至不想在我自己的属性中配置它们。我希望有一种简单的方法可以告诉代理立即将消息发送到死信队列,而不是尝试重新传递。
好像应该是message.deadLetter()
。我觉得我一定遗漏了一些简单的东西,但我在消费者、会话或消息上没有看到任何类似的机制。
您在 JMS 规范中描述的功能没有适应性。 JMS 规范通过 JMSRedelivered
header 和 JMSXDeliveryCount
属性 等方式合并了重新传递。但是,它实际上没有提到“dead-letter”目的地。
也就是说,这样的功能 可能 由特定的 JMS 代理提供,但由于您没有提及您正在使用的 JMS 代理实现,因此无法确定是否您选择的经纪人实现了这样的功能。在任何情况下,它都将被配置为 and/or 通过 implementation-specific 机制调用,根据定义,该机制在代理之间 non-portable 并且无法从 JMS API.