此内容没有您所选择的语言版本。

Chapter 20. Using the qpid-java AMQP 0-10 client


20.1. A Simple Messaging Program in Java JMS

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();
    }
	}
}
Explanation

Here is an explanation of the program code:

properties.load(this.getClass().getResourceAsStream("hello.properties"));
Loads the JNDI properties file, which specifies connection properties, queues, topics, and addressing options.
Context context = new InitialContext(properties);
Creates the JNDI initial context.
ConnectionFactory connectionFactory
          = (ConnectionFactory) context.lookup("qpidConnectionfactory");
Creates a JMS connection factory for Qpid.
Connection connection = connectionFactory.createConnection();
Creates a JMS connection.
connection.start();
Activates the connection.
Session session=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Creates a session. This session is not transactional (transactions='false'), and messages are automatically acknowledged.
Destination destination = (Destination) context.lookup("topicExchange");
Creates a destination for the topic exchange, so senders and receivers can use it.
MessageProducer messageProducer = session.createProducer(destination);
Creates a producer that sends messages to the topic exchange.
MessageConsumer messageConsumer = session.createConsumer(destination);
Creates a consumer that reads messages from the topic exchange.
message = (TextMessage)messageConsumer.receive();
Reads the next available message.
connection.close();
Closes the connection, all sessions managed by the connection, and all senders and receivers managed by each session.
context.close();
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
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部