HornetQ,消费者无法找到队列

时间:2010-11-19 17:37:27

标签: c++ content-management-system hornetq activemq-cpp

我正在尝试使用HornetQ的ActiveMQ-CPP。我正在使用ActiveMQ-CPP捆绑示例,但我很难用它。 制作人的作品就像一个魅力,但消费者给了我以下信息:

* BEGIN SERVER-SIDE STACK TRACE
Message: Queue /queue/exampleQueue does not exist Exception Class
END SERVER-SIDE STACK TRACE *

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

问题是队列存在。这段代码可以在ActiveMQ + Openwire上运行,但我对HornetQ + STOMP没有同样的运气。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

因此,尝试通过STOMP连接到此地址。

根据协议查看以下框架:

订阅队列

SUBSCRIBE
destination:jms.queue.exampleQueue

^@

发送消息

SEND
destination:jms.queue.exampleQueue

it works
^@

一旦发送消息,您就会在订阅队列的会话中收到消息

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上也是如此。

答案 1 :(得分:1)

HornetQ不喜欢SUBSCRIBE的“/ queue /”前缀。我从StompHelper的ToStomp方法中取出了它,一切正常。