在下面的例子中,首先创建两个Queue,发送者给一个Queue发送,接收者接收到消息之后给另一个Queue回复一个Message,然后再创建一个消费者来接受所回复的消息。[/size]

/** 

*

*/

package reply;


import javax.jms.Connection;

import javax.jms.JMSException;

import javax.jms.Message;

import javax.jms.MessageConsumer;

import javax.jms.MessageListener;

import javax.jms.MessageProducer;

import javax.jms.Queue;

import javax.jms.Session;

import javax.jms.TextMessage;


import org.apache.activemq.ActiveMQConnectionFactory;

import org.apache.activemq.command.ActiveMQQueue;


/**

* Producer send a message with the content "Josh", The receiver will reply

* to the message after received the message, the content is "Hello, Josh",

* Finally create another consumer on the second queue and print the content.

* @author Wang Sheng(Josh)

*

*/

public class MessageSendReceiveAndReply {


/**

* @param args

*/

public static void main(String[] args) throws Exception {

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();


Connection connection = factory.createConnection();

connection.start();


// Send the message to the queue

Queue queue = new ActiveMQQueue("Josh_ReceiveQueue");


// Reply the message to the queue

Queue replyQueue = new ActiveMQQueue("Josh_ReplyQueue");


final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);


// Create a message and set the JMSReplyTo with replyQueue

Message message = session.createTextMessage("Josh");

// Define where will the message reply to

message.setJMSReplyTo(replyQueue);


MessageProducer producer = session.createProducer(queue);

producer.send(message);


// The receiver of the Message

MessageConsumer consumer = session.createConsumer(queue);

consumer.setMessageListener(new MessageListener() {


@Override

public void onMessage(Message message) {

try {

System.out.println("Start to receive the message");

// Create a new Message Producer to send the reply message.

MessageProducer producer = session.createProducer(message

.getJMSReplyTo());

producer.send(session.createTextMessage("Hello"

+ ((TextMessage) message).getText()));


System.out.println("Consumer receive the message and reply sucessfully");

} catch (Exception e) {

e.printStackTrace();

}


}

});


// The receiver is used to receive the replied message

MessageConsumer consumer2 = session.createConsumer(replyQueue);

consumer2.setMessageListener(new MessageListener() {


@Override

public void onMessage(Message message) {

try {

System.out.println(((TextMessage)message).getText());

} catch (JMSException e) {

e.printStackTrace();

}


}

});

}


}