JMSListener逸出'。'对于长期订阅

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

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

如何避免那些反斜线?

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

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

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

为了以后能够将该名称分解为它的组成部分,必须在客户端ID或订阅名称中对.字符的任何使用都必须转义。由于您在JMS订阅的名称中使用Consumer.Test,因此最终会将其转义为Consumer\\.Test以在基础订阅队列的名称中使用。在这种情况下,无法配置代理对.字符的使用。

[如果您不想转义订阅的名称,那么我建议您使用带有.字符的名称(例如Consumer-Test)。

© www.soinside.com 2019 - 2024. All rights reserved.