1

セッション Bean が 1 つの ejb プロジェクトで作成され、キューを使用して別のプロジェクトのメッセージ駆動型 Bean にメッセージを送信するプログラムがあります。メッセージ駆動型 Bean では、セッション Bean から送信されたメッセージを取得できます。次に、メッセージを使用して別の値を取得し、それをセッション Bean に送り返す必要があります。それを行う方法についてのアイデア。与えられた助けに感謝します。

ManagerBean:(部分コード)

            queueConnection=queueConnectionFactory.createConnection();
            session=queueConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            replyQueue=session.createTemporaryQueue();
            consumer=session.createConsumer(replyQueue);
            consumer.setMessageListener(new LpsListener());
            queueConnection.start();
            producer=session.createProducer(queue);

            message=session.createMapMessage();
            message.setJMSReplyTo(replyQueue);
            producer.send(message);

と私の MDB:(OnMessage の一部)

            msg=(MapMessage)message;

            String memId=msg.getString("MemberId");
            int fine=mmr.getFine(memId);

            queueConnection=queueConnectionFactory.createConnection();
            replyDest=msg.getJMSReplyTo();
            replyCorrelationMsgId=msg.getJMSMessageID();
            queueSession=queueConnection.createSession(true, 0);
            queueProducer=queueSession.createProducer(replyDest);
            replyMsg=createReplyMsg(queueSession, replyCorrelationMsgId);
            queueProducer.send(replyMsg);

            private ObjectMessage createReplyMsg(Session session, String msgId)throws                      JMSException{
            ObjectMessage replyMsg=session.createObjectMessage();
            replyMsg.setIntProperty("fine", fine);
            replyMsg.setJMSCorrelationID(msgId);
            return replyMsg;
            }
4

2 に答える 2

0

JMSCorrelationIDと組み合わせて使用JMSReplyTo​​すると、JMS で要求/応答メカニズムを使用できます。

以下は、テストされていないサンプル コードです。

マネージャービーン

message.setJMSReplyTo(queue);
String correlationId = generateRandomString();
message.setJMSCorrelationID(correlationId);
producer.send(message);

メッセージ駆動型 Bean

responseMessage.setJMSCorrelationID(requestMessage.getJMSCorrelationID());
queueProducer.send(requestMessage.getJMSReplyTo(), responseMessage);

編集:さらに明確にするためにドキュメントから抜粋。

  • JMSCorrelationID :クライアントは JMSCorrelationID ヘッダー フィールドを使用して、メッセージを別のメッセージにリンクできます。典型的な用途は、応答メッセージをその要求メッセージにリンクすることです。

  • JMSReplyTo : JMSReplyTo ヘッダー フィールドには、現在のメッセージへの返信の送信先が含まれます。場合によっては、クライアントは、以前に送信した要求と、受信したばかりの応答を一致させたい場合があります。クライアントは、この目的で JMSCorrelationID ヘッダー フィールドを使用できます。

【地雷強調】

于 2013-03-28T06:00:12.667 に答える
0

メッセージを Bean の新しいインスタンスに送り返す場合。すなわち。@EJBステートレス Bean 。アノテーションを使用して Bean の新しいインスタンスを注入するだけです。特定のステートフル Bean に送信する場合は、Bean ID など、最初のメッセージで Bean を識別する何らかの方法が必要です。この ID は、返信メッセージを送信するときに Bean を識別するために使用されます。

于 2013-03-27T10:15:41.433 に答える