1

我有一个程序,其中在一个 ejb 项目中创建会话 bean,并使用队列将消息发送到单独项目中的消息驱动 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

您可以与 JMSJMSCorrelationID结合使用JMSReplyTo以具有请求/响应机制。

以下是未经测试的示例代码。

经理豆

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 的新实例。IE。一个无状态的 bean,你可以使用@EJB注解注入一个新的 Bean 实例。如果您想将它发送到特定的有状态 bean,那么您应该有某种方式来识别第一条消息中的 Bean,例如 bean id。然后,当您发送返回消息时,此 id 将用于标识 bean。

于 2013-03-27T10:15:41.433 回答