0

シナリオ

messageListener を実装して、WebLogic Queue からメッセージを消費しています。onMessage() 呼び出しが成功し、受信したメッセージを onMessage 関数内から出力できます。

要件

この msgText を受信したらすぐに処理し、処理結果を呼び出し元のメソッドに返します。

コード

@Override

public void onMessage(メッセージメッセージ) {

try {
    String msgText;
    if (msg instanceof TextMessage) {
        msgText = ((TextMessage) msg).getText();
    } else {
        msgText = msg.toString();
    }
    System.out.println(msgText);

} catch (JMSException ex) {
    ex.printStackTrace();
}

}

4

2 に答える 2

0

メッセージ駆動型 Bean には、どのメソッドがメッセージ キューにメッセージをポストしたかの手がかりがなく、通常、MDB にはコールバック メカニズムがないため、直接行うことはできません。

しかし、役立つトリックがあります。これはTemporaryQueueと呼ばれ、次のように使用する必要があります。メッセージ プロデューサーで、コードの次の部分を追加します。

// OPEN CONNECTION AND CREATE SESSION
..
TemporaryQueue tempQueue = session.createTemporaryQueue();
msg.setJMSReplyTo(tempQueue);
// SEND MESSAGE
..
MessageConsumer mc = session.createConsumer(tempQueue);
Message retMsg = mc.receive(); //WAITING FOR A RESPONSE..

コンシューマー (メッセージ駆動型 Bean) では、次の一時キューを使用します。

Queue destination = (Queue) message.getJMSReplyTo();
// CREATE PRODUCER, CREATE MESSAGE AND SEND THE MESSAGE

このようにして、コールバック メカニズムをシミュレートします。オブジェクトretMsgには処理された結果が含まれている必要があり、これで完了です。

于 2012-12-06T08:13:17.437 に答える
0

処理されたメッセージの結果を関数の呼び出しに戻そうとしていますか? もしそうなら、これは非同期呼び出しになるので、ここでは不可能だと思います。

そうでない場合は、質問を明確に投稿してください。

于 2012-12-05T17:50:09.980 に答える