0

我在 Mule Flow 中制作了一个 Java 组件,它向队列发送消息,我想以编程方式而不是使用 Mule JMS 组件。

从制片人那里我得到了这个代码:

@Override
public Object onCall(MuleEventContext eventContext) throws Exception {
    String payload = eventContext.getMessage().getPayloadAsString();
    JmsConnector amqConnector = (JmsConnector) eventContext.getMuleContext().getRegistry().lookupConnector("Active_MQ");
    ConnectionFactory factory = amqConnector.getConnectionFactory();
    Connection connection; 

    connection = factory.createConnection();

    try {
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue("ExampleQueue");

        MessageProducer producer = session.createProducer(queue);
        TemporaryQueue replyQueue = session.createTemporaryQueue();

        TextMessage message = session.createTextMessage(payload);
        message.setJMSReplyTo(replyQueue);
        message.setJMSDestination(queue);
        message.setJMSCorrelationID("TestID");
        producer.send(message, DeliveryMode.NON_PERSISTENT, 0, 5000);

        MessageConsumer consumer = session.createConsumer(replyQueue);
        MessageListener listener = consumer.getMessageListener();
        listener.onMessage(message);



    }finally {
        connection.close();
    }

    return eventContext;
}

现在,从消费者那里,我得到了一个普通的 Mule JMS 组件,它正在监听同一个队列(ExampleQueue)。

现在,我希望这是请求响应。但是当我现在运行它时,我得到了一个 NullPointerExceptionMessageListener listener = consumer.getMessageListener();

如何让客户端生产者在收到响应消息之前一直监听 TemporaryQueue?

谢谢

4

1 回答 1

1

成功了:D

不得不添加这个:

MessageConsumer consumer = session.createConsumer(replyQueue);      
            TextMessage receivedMessage = (TextMessage) consumer.receive(); 
            text = receivedMessage.getText();

为了从消费者那里得到文本!

于 2013-08-28T20:21:15.920 回答