HornetQ, потребитель не может найти очередь - PullRequest
2 голосов
/ 19 ноября 2010

Я пытаюсь использовать ActiveMQ-CPP с HornetQ. Я использую пример ActiveMQ-CPP, но мне трудно с ним работать. Производитель работает как шарм, но потребитель дает мне следующее сообщение:

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

Проблема в том, что очередь существует. Код работает нормально с ActiveMQ + Openwire, но мне не везет с HornetQ + STOMP.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

Попробуйте установить в качестве получателя тот же адрес очереди, который вы определили в 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 голос
/ 14 декабря 2010

HornetQ не нравится префикс "/ queue /" для ПОДПИСКА.Я взял это из метода ToStomp в StompHelper, и все заработало.

...