gpt4 book ai didi

c++ - HornetQ,消费者找不到队列

转载 作者:搜寻专家 更新时间:2023-10-31 01:58:20 26 4
gpt4 key购买 nike

我正在尝试将 ActiveMQ-CPP 与 HornetQ 一起使用。我正在使用 ActiveMQ-CPP 捆绑示例,但我很难使用它。生产者工作得很好,但消费者给我以下信息:



<p><strong>* BEGIN SERVER-SIDE STACK TRACE <em></em></strong><em><br/>
Message: Queue /queue/exampleQueue does not exist
Exception Class<br/>
<strong></strong></em><strong> END SERVER-SIDE STACK TRACE *</strong> </p>

<p>FILE: activemq/core/ActiveMQConnection.cpp, LINE: 768<br/>
FILE: activemq/core/ActiveMQConnection.cpp, LINE: 774<br/>
FILE: activemq/core/ActiveMQSession.cpp, LINE: 350<br/>
FILE: activemq/core/ActiveMQSession.cpp, LINE: 281<br/>
Time to completion = 0.161 seconds.</p>

问题是队列存在。代码在 ActiveMQ+Openwire 上运行良好,但我在 HornetQ+STOMP 上就没那么幸运了。

有什么想法吗?

最佳答案

尝试将您在 Hornetq 上定义的同一个队列的地址设置为目的地。

可能你的队列是这样在HornetQ上定义的

 <queue name="exampleQueue">
<address>jms.queue.exampleQueue</address>
</queue>

所以,尝试通过 STOMP 连接到这个地址。

根据协议(protocol)查看如下帧:

订阅队列

SUBSCRIBE
destination:jms.queue.exampleQueue

^@

发送消息

SEND
destination:jms.queue.exampleQueue

it works
^@

一旦发送消息,您将在订阅队列的 session 上收到消息

MESSAGE
timestamp:1311355464983
redelivered:false
expires:0
subscription:subscription/jms.queue.exampleQueue
priority:0
message-id:523
destination:jms.queue.exampleQueue

it works

-- 编辑

还有一点我想补充...

HornetQ 不符合 STOMP 的命名标准(参见 http://community.jboss.org/message/594176),因此 activemq-cpp 有可能遵循 ativemq-nms 的行为,它将队列的名称“规范化”为 STOMP 标准:“/queue/YourQueue”(并导致命名问题)。

因此,如果是这种情况,即使您尝试将目标名称更改为“jms.queue.exampleQueue”,activemq-cpp 也可以将其规范化为“/queue/jms.queue.exampleQueue”。

在 NMS+HornetQ 中,没有“开箱即用”的方法来避免这种情况。唯一的选择是编辑 NMS 的源代码并删除标准化队列名称的部分。也许在 activemq-cpp 上也是这样。

关于c++ - HornetQ,消费者找不到队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227763/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com