The following program shows how to send and receive a message using the qpid-java client. JMS programs typically 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.
In this example, 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 from the JNDI context. Then we create a producer and a consumer, send a message with the producer and receive it with the consumer.
package org.apache.qpid.example.jmsexample.hello;
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) {
Hello producer = new Hello();
producer.runTest();
}
private void runTest() {
try {
Properties properties = new Properties();
properties.load(this.getClass().getResourceAsStream("hello.properties"));
Context context = new InitialContext(properties);
ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionfactory");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = (Destination) context.lookup("topicExchange");
MessageProducer messageProducer = session.createProducer(destination);
MessageConsumer messageConsumer = session.createConsumer(destination);
TextMessage message = session.createTextMessage("Hello world!");
messageProducer.send(message);
message = (TextMessage)messageConsumer.receive();
System.out.println(message.getText());
connection.close();
context.close();
}
catch (Exception exp) {
exp.printStackTrace();
}
}
}
package org.apache.qpid.example.jmsexample.hello;
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) {
Hello producer = new Hello();
producer.runTest();
}
private void runTest() {
try {
Properties properties = new Properties();
properties.load(this.getClass().getResourceAsStream("hello.properties"));
Context context = new InitialContext(properties);
ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionfactory");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination destination = (Destination) context.lookup("topicExchange");
MessageProducer messageProducer = session.createProducer(destination);
MessageConsumer messageConsumer = session.createConsumer(destination);
TextMessage message = session.createTextMessage("Hello world!");
messageProducer.send(message);
message = (TextMessage)messageConsumer.receive();
System.out.println(message.getText());
connection.close();
context.close();
}
catch (Exception exp) {
exp.printStackTrace();
}
}
}
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Explanation
Here is an explanation of the program code:
properties.load(this.getClass().getResourceAsStream("hello.properties"));
properties.load(this.getClass().getResourceAsStream("hello.properties"));
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Loads the JNDI properties file, which specifies connection properties, queues, topics, and addressing options.
Context context = new InitialContext(properties);
Context context = new InitialContext(properties);
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates the JNDI initial context.
ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionfactory");
ConnectionFactory connectionFactory
= (ConnectionFactory) context.lookup("qpidConnectionfactory");
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates a JMS connection factory for Qpid.
Connection connection = connectionFactory.createConnection();
Connection connection = connectionFactory.createConnection();
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates a JMS connection.
connection.start();
connection.start();
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Activates the connection.
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates a session. This session is not transactional (transactions='false'), and messages are automatically acknowledged.
Destination destination = (Destination) context.lookup("topicExchange");
Destination destination = (Destination) context.lookup("topicExchange");
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates a destination for the topic exchange, so senders and receivers can use it.
MessageProducer messageProducer = session.createProducer(destination);
MessageProducer messageProducer = session.createProducer(destination);
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates a producer that sends messages to the topic exchange.
MessageConsumer messageConsumer = session.createConsumer(destination);
MessageConsumer messageConsumer = session.createConsumer(destination);
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Creates a consumer that reads messages from the topic exchange.
message = (TextMessage)messageConsumer.receive();
message = (TextMessage)messageConsumer.receive();
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Reads the next available message.
connection.close();
connection.close();
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Closes the connection, all sessions managed by the connection, and all senders and receivers managed by each session.
context.close();
context.close();
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Closes the JNDI context.
hello.properties file
The contents of the hello.properties file are shown below.
java.naming.factory.initial
= org.apache.qpid.jndi.PropertiesFileInitialContextFactory
# connectionfactory.[jndiname] = [ConnectionURL]
connectionfactory.qpidConnectionfactory
= amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'
# destination.[jndiname] = [address_string]
destination.topicExchange = amq.topic
java.naming.factory.initial
= org.apache.qpid.jndi.PropertiesFileInitialContextFactory
# connectionfactory.[jndiname] = [ConnectionURL]
connectionfactory.qpidConnectionfactory
= amqp://guest:guest@clientid/test?brokerlist='tcp://localhost:5672'
# destination.[jndiname] = [address_string]
destination.topicExchange = amq.topic
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow