配置 activeMQ服務器
下載 activeMQ 地址:http://www.apache.org/dyn/closer.cgi/activemq/apache-activemq/5.2.0/apache-activemq-5.2.0-bin.tar.gz
1 解壓縮後 放到了e盤
2 使用cmd 鍵入E:\apache-activemq-5.2.0\bin\activemq.bat 啓動服務器 OK 這是activeMQ開始服務了 下面我們要寫JMS程序
JMS程序編寫:
1 生產者
package jms;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
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 javax.jms.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
/**
*
*
* @author Shal
* @date:Jun 11, 2009 11:56:42 AM
* @version :
*/
public class JMSProducer {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
// TODO Auto-generated method stub
//activeMQ的默認服務端口是61616 我這裏在conf文件夾下的配置文件中改了端口
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.102.24:61618");
Connection conn = factory.createConnection();
conn.start();
Queue queue = new ActiveMQQueue("q");
Topic topic = new ActiveMQTopic("t");
final Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
Message msg = session.createTextMessage("Hello");
//設置消費者的回覆目標
msg.setJMSReplyTo(topic);
MessageProducer producer = session.createProducer(queue);
for(int i=0;i<10;i++)
{
producer.send(session.createTextMessage("msg "+i));
}
System.out.println("send over");
//當消費者接受到消息後回覆時 此時這裏的生產者又充當了消費者的角色
MessageConsumer consumer2 = session.createConsumer(topic);
consumer2.setMessageListener(new MessageListener(){
@Override
public void onMessage(Message msg1) {
// TODO Auto-generated method stub
try {
System.out.println("2 < <"+((TextMessage)msg1).getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
}
2 消費者
package jms;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
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.Topic;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
/**
*
*
* @author Shal
* @date:Jun 11, 2009 8:57:56 AM
* @version :
*/
public class Consumer {
/**
* @param args
* @throws JMSException
*/
public static void main(String[] args) throws JMSException {
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.102.24:61618");
Connection conn = factory.createConnection();
conn.start();
Queue queue = new ActiveMQQueue("q");
final Topic top = new ActiveMQTopic("t");
final Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(queue);
final MessageProducer p = session.createProducer(top);
consumer.setMessageListener(new MessageListener(){
@Override
public void onMessage(Message msg1) {
try {
System.out.println("1 < <"+msg1);
MessageProducer p = session.createProducer(top);
Message msg = session.createTextMessage("haha");
//給回覆消息設置目標 這裏的目標就是Producer裏設置的
msg.setJMSDestination(msg1.getJMSReplyTo());
p.send(msg);
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
--------------------------------------------------------------------------------兩個類運行(不分先後)-------------------------------
producer的控制檯中輸出
send over
2 <