3

hornetqで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接続をクライアント側で開く必要がありますか?

4

2 に答える 2

1

Stompは単純なプロトコルであり、この場合、多重化されたチャネルを持つことはできないと思います。したがって、おそらく送信するストリームと受信するストリームが必要になります。

于 2011-09-24T21:15:33.427 に答える
0

JMS との同期 (要求/応答) 通信を実装するための一般的な戦略 (一時的な宛先を使用) は、多くのメッセージ ブローカー (ActiveMQ、Apollo、OpenMQ、RabbitMQ など) の STOMP 実装でも利用できます。

ただし、HornetQ は現在の 2.4.0.Final バージョンでは一時的な宛先をサポートしていません。

于 2014-10-18T16:14:44.983 に答える