camel-jms:共享持久订阅:参数subscriptionName转义点(.)

问题描述 投票:0回答:1
  • 阿帕奇阿耳忒弥斯:2.31.2
  • Spring 启动:2.7.18
  • 阿帕奇骆驼:3.22.0

我有一个关于 ActiveMQ Artemis 中 Camel 共享持久订阅的问题。 我已从 ActiveMQ Classic VirtualTopics 迁移,并且我的代理中有以下配置:

<address name="VirtualTopic.ccncsi.fromEurope">
   <multicast>
      <queue name="Consumer.dispatcher.VirtualTopic.ccncsi.fromEurope"/>
      <queue name="Consumer.ccncsiaudit.VirtualTopic.ccncsi.fromEurope"/>
      <queue name="Consumer.ccncsigateway.VirtualTopic.ccncsi.fromEurope"/>
   </multicast>
</address>

我正在尝试使用 JMS 端点通过端点连接到地址

VirtualTopic.ccncsi.fromEurope
和订阅名称
Consumer.dispatcher.VirtualTopic.ccncsi.fromEurope
jms:topic:VirtualTopic.ccncsi.fromEurope?subscriptionName=Consumer.dispatcher.VirtualTopic.ccncsi.fromEurope&subscriptionDurable=true&subscriptionShared=true
灵感来自 Stack Overflow 上的 this thread

但是,当部署路由并赋予足够的权限时,端点会在地址上创建一个新队列,并在

 中定义的现有队列(即 
.
)旁边转义点(即 
Consumer\.dispatcher\.VirtualTopic\.ccncsi\.fromEurope
)。 Consumer.dispatcher.VirtualTopic.ccncsi.fromEurope
我需要保留此消费者队列名称,因为较旧的客户端使用 VirtualTopic 映射通过 WebLogic 和 Openwire 协议进行连接。

在该配置中,我可以观察到队列上有一个消费者

broker.xml

,但我希望我的端点从现有队列中消费:

Consumer\.dispatcher\.VirtualTopic.ccncsi\.fromEurope
如果罪魁祸首是 Camel 或 Artemis,我就无法锻炼,但是当调用 

Consumer.dispatcher.VirtualTopic.ccncsi.fromEurope

且请求 (

org.apache.activemq.artemis.core.protocol.core.ServerSessionPacketHandler#session.createSharedQueue(request.toQueueConfiguration());
) 转换为
org.apache.activemq.artemis.core.protocol.core.Packet
时,我可以看到点已经被转义了。
这是正常行为吗?

apache-camel activemq-artemis
1个回答
0
投票

这里首先要注意的是,订阅队列的名称(即本例中的

QueueConfiguration

)是经纪人控制下的实现细节。对于非共享的持久订阅,代理将使用客户端 ID 和订阅名称组成订阅队列名称,并以点字符 (

Consumer\.dispatcher\.VirtualTopic\.ccncsi\.fromEurope
) 分隔。由于点字符是分隔符,代理会转义客户端 ID 和订阅名称中任何现有的点。对于共享持久订阅,客户端 ID 被省略,仅使用订阅名称,但代理仍然避开这些点。
也就是说,您仍然可以通过在 Camel 路由中使用完全限定的队列名称来获得您想要的行为,例如:

.

我对 Camel 不太熟悉,所以其中多余的冒号(即 
jms:queue:VirtualTopic.ccncsi.fromEurope::Consumer.dispatcher.VirtualTopic.ccncsi.fromEurope

)可能需要转义,但希望你能明白。使用 FQQN 将允许您在队列上创建一个使用者,该使用者将与您环境中的其他虚拟主题使用者共享消息。

    

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