синхронный обмен сообщениями с STOMP через HornetQ

Я пытаюсь выяснить, как делать синхронные сообщения, используя топт с hornetq, или, если это возможно. У меня работает асинхронный клиент, но я не понимаю, как бы реализовать синхронизирующую версию.

Со стороны сервера мой акцептор выглядит так:

<acceptor name="stomp-acceptor">
  <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>        
  <param key="protocol" value="stomp" />
  <param key="port" value="61613" />
</acceptor>

а мой слушатель выглядит так:

public class SimpleSyncListener extends BaseListener implements SessionAwareMessageListener<Message> {

@Override
public void onMessage(Message message, Session session) throws JMSException {
    String lastMessage = "";

    try {
        lastMessage = ((TextMessage) message).getText();

        //System.out.println("server recieved: " + lastMessage);

        Destination replyDestination = message.getJMSReplyTo();

        StringBuffer sb = new StringBuffer();
        sb.append("reply ");
        sb.append(Calendar.getInstance().getTimeInMillis());
        sb.append(" ");
        sb.append(lastMessage);
        TextMessage replyMessage = session.createTextMessage(sb.toString());
        replyMessage.setJMSCorrelationID(message.getJMSMessageID());

        MessageProducer replyProducer = session.createProducer(replyDestination);

        replyProducer.send(replyMessage);

    } catch (JMSException e) {
        throw new RuntimeException(e);
    }
    incrementCount();

}

Я предполагаю, что мне нужно поместить что-то во временную очередь и отправить обратно, как вы это делаете с JMS. Мне просто непонятно, как это работает с STOMP. Нужно ли мне снова открывать другое TCP-соединение на стороне клиента, которое соответствует «временной очереди» на стороне сервера?


person clarson    schedule 24.09.2011    source источник


Ответы (2)


Stomp - это простой протокол, и в этом случае я не думаю, что у вас может быть мультиплексированный канал. Таким образом, вам, вероятно, понадобится Stream для отправки и Stream для получения.

person Clebert Suconic    schedule 24.09.2011

Общая стратегия реализации синхронной (запрос / ответ) связи с JMS - с использованием временных пунктов назначения - также доступна с реализациями STOMP многих брокеров сообщений (примеры - ActiveMQ, Apollo, OpenMQ и RabbitMQ).

Однако HornetQ не поддерживает временные адреса назначения в текущей версии 2.4.0.Final.

person mjn    schedule 18.10.2014