JMS Artemis DLQ 当 DLQ 上有活跃消费者时消息丢失

问题描述 投票:0回答:1

设置:

  • Spring Boot 2.7.1
  • ActiveMQ Artemis(未嵌入)
  • 每个队列有单独的 DLQ 作为 ANYCAST。

设置基本上工作正常,除了我添加一个监听 DLQ 的

@JmsListener

所以我有多个

JmsListener
,其中一个监听常规队列
q1
。如果操作失败两次,消息将移至指定的 DLQ
DLQ.q1

只要此时没有

DLQ.q1
的活跃消费者,此方法就有效。消息存储在 DLQ 中。

一旦启用

JmsListener
的消费者 (
DLQ.q1
),来自 q1 的死信就不会出现在 DLQ 中,也不会被消耗。消息、添加的消息总数以及 DLQ 中删除的消息仍然显示 0。

使用直接发送到 DLQ 的消息也可以。

DLQ 上有活动侦听器时会出现问题吗?有什么特别需要注意的吗?

spring-boot spring-jms activemq-artemis
1个回答
0
投票

我想我现在可以回答我自己的问题了。

@JmsListener
上有
DLQ.q1
时,会自动创建此队列(如果在代理中启用了自动创建队列设置)。这个队列有地址=名称,所以
address=DLQ.q1;name=DLQ.q1

当没有监听器并且由于死信消息而自动创建 DLQ 时,将使用

address=DLA;name=DLQ.q1

创建队列

要从

DLA.DLQ.q1
接收,JMS 监听器必须像这样设置:

@JmsListener(destination = "DLA::DLQ.q1")
© www.soinside.com 2019 - 2024. All rights reserved.