配置 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 <