0

使用 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. 对于地址,它以某种方式起作用。

我怎样才能避免那些反斜杠?

4

1 回答 1

0

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

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

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

由于您使用Consumer.Test的是 JMS 订阅的名称,因此最终将转义为Consumer\\.Test用于底层订阅队列的名称。在这种情况下,经纪人对.角色的使用是不可配置的。

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

于 2020-05-15T16:18:02.480 回答