通过HornetQ与STOMP同步消息传递

时间:2011-09-24 01:15:55

标签: java jms synchronous hornetq stomp

我正在试图弄清楚如何使用与hornetq的stomp进行同步消息传递,或者它是否可能。我有一个异步的stomp客户端工作,但我看不出如何实现同步版本。

在服务器端,我的接受器看起来像这样:

<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连接?

2 个答案:

答案 0 :(得分:1)

Stomp是一个简单的协议,在这种情况下,我认为你不能拥有一个多路复用的通道。所以你可能需要一个Stream发送,一个Stream接收。

答案 1 :(得分:0)

与JMS实现同步(请求/响应)通信的常用策略 - 使用临时目标 - 也可用于许多消息代理的STOMP实现(ActiveMQ,Apollo,OpenMQ和RabbitMQ都是示例)。

但是,HornetQ不支持当前2.4.0.Final版本中的临时目的地。

相关问题