Table of Contents
The following programs shows how to send and receive messages using the Client. The first program illustrates a point to point example, the second, a pubish/subscribe example.
Both examples show the use JNDI to obtain connection factory and destination objects which the application needs. In this way the configuration is kept separate from the application code itself.
The example code will be straightforward for anyone familiar with JMS. Readers in need of an introduction are directed towards Oracle's JMS tutorial.
In this example, we illustrate point to point messaging. 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 queue) from the JNDI context. Then we create a producer and a consumer, send a message with the producer and receive it with the consumer.
Example 4.1. JMS Example - Point to Point Messaging
import javax.jms.*; import javax.naming.Context; import javax.naming.InitialContext; import java.util.Properties; public class Hello { public Hello() { } public static void main(String[] args) throws Exception { Hello hello = new Hello(); hello.runTest(); } private void runTest() throws Exception { Properties properties = new Properties(); properties.load(this.getClass().getResourceAsStream("helloworld.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); Queue queue = (Queue) context.lookup("myqueue"); MessageConsumer messageConsumer = session.createConsumer(queue); MessageProducer messageProducer = session.createProducer(queue); TextMessage message = session.createTextMessage("Hello world!"); messageProducer.send(message); session.commit(); message = (TextMessage)messageConsumer.receive(); session.commit(); System.out.println(message.getText()); connection.close(); context.close(); } }
Loads the JNDI properties file, which specifies the connection factory, queues and topics. See Chapter 6, JNDI Properties Format for details. | |
Creates the JNDI initial context. | |
Looks up a JMS connection factory for Qpid. | |
Creates a JMS connection. Creating the JMS connections establishes the connection to the Broker. | |
Starts the connection, required for the consumption of messages. | |
Creates a transactional session. | |
Looks up a destination for the queue with JNDI name myqueue. | |
Creates a consumer that reads messages from the queue[2]. | |
Creates a producer that sends messages to the queue. | |
Creates a new message of type javax.jms.TextMessage, publishes the message and commits the session. | |
Reads the next available message (awaiting indefinitely if necessary) and commits the session. | |
Closes the Connection. All sessions owned by the Connection along with their MessageConsumers and MessageProducers are automatically closed. The connection to the Broker is closed as this point. | |
Closes the JNDI context. |
The contents of the helloworld.properties
file are shown
below.
Defines a connection factory from which Connections can be created. The syntax of a ConnectionURL is given in Chapter 7, Connection URLs. | |
Defines a queue for which MessageProducers and/or MessageConsumers send and receive messages. The format of these entries is described in Section 6.2, “Queue”. |
[2] Creating consumer will automatically create the queue on the Broker
and bind it to an exchange. Specifically, in this case as the
queue.
form is used in the JNDI properties the
effect will be to create a queue called queue1
on the
Broker, and create a binding between the amq.direct
exchange and this queue using the queue's name. This process is
described in detail in Section 5.6.1, “Consumers have Exchange/Queue Declaration and Binding Side Effect”
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