在下面的例子中,首先创建两个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();
}
}
});
}
}