使用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或订阅名称中对.
字符的任何使用都必须转义。由于您在JMS订阅的名称中使用Consumer.Test
,因此最终会将其转义为Consumer\\.Test
以在基础订阅队列的名称中使用。在这种情况下,无法配置代理对.
字符的使用。
[如果您不想转义订阅的名称,那么我建议您使用带有.
字符的名称(例如Consumer-Test
)。