In this second example, we illustrate publish/subscribe messaging. Again, we create a JNDI context using a properties file, use the context to lookup a connection factory, create and start a connection, create a session, and lookup a destination (a topic) from the JNDI context. Then we create a producer and two durable subscribers , send a message with the producer. Both subscribers receive the same message.
Example 4.3. JMS Example - Publish/subscribe Messaging
import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
public class StocksExample {
public StocksExample() {
}
public static void main(String[] args) throws Exception {
StocksExample stocks = new StocksExample();
stocks.runTest();
}
private void runTest() throws Exception {
Properties properties = new Properties();
properties.load(this.getClass().getResourceAsStream("stocks.properties"));
Context context = new InitialContext(properties);
ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionFactory");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
Topic priceTopic = (Topic) context.lookup("myprices");
MessageConsumer subscriber1 = session.createDurableSubscriber(priceTopic, "sub1");
MessageConsumer subscriber2 = session.createDurableSubscriber(priceTopic, "sub2" /*, "price > 150", false*/ );
MessageProducer messageProducer = session.createProducer(priceTopic);
Message message = session.createMessage();
message.setStringProperty("instrument", "IBM");
message.setIntProperty("price", 100);
messageProducer.send(message);
session.commit();
message = subscriber1.receive(1000);
session.commit();
System.out.println("Subscriber 1 received : " + message);
message = subscriber2.receive(1000);
session.commit();
System.out.println("Subscriber 2 received : " + message);
session.unsubscribe("sub1");
session.unsubscribe("sub2");
connection.close();
context.close();
}
}
Looks up a destination for the topic with JNDI name myprices. | |
Creates two durable subscribers, | |
Unsubscribes the two durable subscribers, permanently removing the knowledge of the subscriptions from the system. An application would normally NOT do this. The typical use-case for durable subsciption is one where the subscription exists over an extended period of time. |
The contents of the stocks.properties file are shown below.
Defines a topic for which MessageProducers and/or MessageConsumers send and receive messages. The format of this entry is described in Section 6.3, “Topic”. |
[3] Each durable subscription is implemented as a queue on the Broker. See Section 5.6.2, “Topic Subscriptions” for details.
Apache Qpid, Messaging built on AMQP; Copyright © 2015 The Apache Software Foundation; Licensed under the Apache License, Version 2.0; Apache Qpid, Qpid, Qpid Proton, Proton, Apache, the Apache feather logo, and the Apache Qpid project logo are trademarks of The Apache Software Foundation; All other marks mentioned may be trademarks or registered trademarks of their respective owners