JMSListener 转义“.”对于持久订阅

JMSListener escapes '.' for durable subscriptions

使用 Spring JMS 4.3.19 以及 5.2.5 我正在尝试为持久订阅设置 JMSListener

@JmsListener(destination = "test", subscription = "Consumer.Test", connectionFactory = "factory")
public void receiveFromDurableSub(String message) {
    System.out.println("receiveFromTest: " + message);
}

但它最终出现在 Consumer\.Test。对于地址,它以某种方式起作用。

如何避免这些反斜杠?

JMS 主题订阅在 ActiveMQ Artemis 上作为队列实现。每个订阅都有自己的队列。

队列的名称取决于订阅的配置方式。代理将使用 JMS 客户端 ID(如果已配置)、JMS 订阅名称(如果已配置)和 JMS 订阅的持久性来构造底层订阅队列的名称。经纪人使用 . 字符将所有这些信息连接在一起以组成最终名称。有关该位的更多详细信息,请参阅 the related source code

为了以后能够将此名称分解为其组成部分,必须转义客户端 ID 或订阅名称中的任何 . 字符.

由于您使用 Consumer.Test 作为 JMS 订阅的名称,因此最终将转义为 Consumer\.Test 以用于基础订阅队列的名称。在这种情况下,代理对 . 字符的使用是不可配置的。

如果您不希望您的订阅名称被转义,那么我建议您不要使用其中包含 . 字符的名称(例如 Consumer-Test)。