Gao Burning
Gao Burning

Reputation: 1

How does the MessageListener running in JMS? Can it load messages in the queue in real time?

I want to load the JMS messages in a queue in real time, if is a consumer.setMessageListener(myListener) viable and how it works?

I'm not sure how a listener working. I wrote a listener like below.

public class JmsMessageListenerExample {
public static void main(String[] args) throws URISyntaxException, Exception {
    BrokerService broker = BrokerFactory.createBroker(new URI(
            "broker:(tcp://localhost:61616)"));
    broker.start();
    Connection connection = null;
    try {
        // Producer
        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
                "tcp://localhost:61616");
        connection = connectionFactory.createConnection();
        Session session = connection.createSession(false,
                Session.AUTO_ACKNOWLEDGE);
        Queue queue = session.createQueue("customerQueue");
        String payload = "Important Task";
        Message msg = session.createTextMessage(payload);
        MessageProducer producer = session.createProducer(queue);
        System.out.println("Sending text '" + payload + "'");
        producer.send(msg);

        // Consumer
        MessageConsumer consumer = session.createConsumer(queue);
        consumer.setMessageListener(new ConsumerMessageListener("Consumer"));
        connection.start();
    } finally {
        if (connection != null) {
            connection.close();
        }
        broker.stop();
    }
}

After I run the JmsMessageListenerExample, it completed quickly and I didn't received any messages. If a listener should keep on running until I stop it?

Upvotes: 0

Views: 965

Answers (1)

Justin Bertram
Justin Bertram

Reputation: 35038

When you set a JMS message listener it will receive messages asynchronously in its own thread (invoked by the JMS implementation). In your case you need to prevent main from exiting and stopping your application because when that happens the MessageListener will be terminated.

Also, when you say "load the JMS messages in a queue in real time" I assume you mean "consume JMS messages from a queue as soon as possible when queue receives them." If that's the case then a JMS message listener is the right approach.

Upvotes: 3

Related Questions