0

设想

我通过实现 messageListener 来使用来自 WebLogic 队列的消息。onMessage() 调用成功,接收到的消息可以从 onMessage 函数中打印出来。

要求

收到此 msgText 后立即处理并将处理后的结果返回给调用方法。

代码

@Override

公共无效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

您是否尝试将处理消息的结果返回给调用函数?如果是这样,我认为这里不可能,因为这将是一个异步调用。

如果没有,请清楚地发布您的问题。

于 2012-12-05T17:50:09.980 回答
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 回答