我已经配置了一个基于 Kubernetes 操作器的 Artemis 部署来
- 每个队列使用带有前缀“DLQ”的单独 DLQ。
- 自动创建 deadLetter 资源
这很好。如果消息超出了最大投递尝试次数,它将被移至其队列的 DLQ。
然而,在 Artemis 中有一个DLQ
默认地址,其中包含一个DLQ
默认队列。所有自动创建的特定 DLQ 都添加到此DLQ
地址。因此它包含名为 的默认队列DLQ
和任意数量的名为 的特定 DLQ DLQ.[queuename]
。
特定的 DLQ 是使用过滤器自动创建的,该过滤器仅包含以特定队列为来源的消息,例如_AMQ_ORIG_ADDRESS = 'testqueue'
。到目前为止一切顺利。
但我遇到的问题是,来自的失败消息testqueue
不仅被移动到DLQ.testqueue
,而且还被复制到DLQ
。同一条消息在 2 个不同的 DLQ 中。这是合理的,因为消息被发送到不排除它的地址的每个队列,并且由于默认 DLQ 没有过滤器,它会接收所有消息。
一开始我以为这只是 2 个队列中可见的 1 条消息,但无论我删除DLQ
或中的消息DLQ.testqueue
,它都不会从另一个队列中删除。这实际上是 2 条消息。
现在我认为我必须删除在 broker.xml 中配置的 Artemis 的默认 DLQ。
但是我该怎么做呢?操作员将默认配置与我的配置合并,我看不出有什么明显的方法可以用任何东西“覆盖”默认地址定义。
我可以添加类型的 CRActiveMQArtemisAddress
来创建地址和队列,但我不知道如何删除默认地址。
感谢您的帮助。
可以使用 ActiveMQArtemis CR 中的代理属性从配置中删除默认地址和队列,即
当启用持久性或代理已运行时,还必须使用 artemis CLI 或管理 API 从日志绑定中删除队列,即