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
)。
使用 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
)。