JMS 之 ActiveMQ入门示例

企业中各项目中相互协作的时候可能用得到消息通知机制。比如有东西更新了,可以通知做索引。

在 Java 里有 JMS 的多个实现。其中 apache 下的 ActiveMQ 就是不错的选择。ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。这里示例下使用 ActiveMQ

用 ActiveMQ 最好还是了解下 JMS


JMS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。

ConnectionFactory 是连接工厂,负责创建Connection。

Connection 负责创建 Session。

Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。

Destination 是消息的目的地。

详细的可以网上找些 JMS 规范(有中文版)。

下载 apache-activemq-5.3.0( http://activemq.apache.org/download.html ),解压,然后双击 bin/activemq.bat。运行后,可以在 http://localhost:8161/admin 观察。也有 demo, http://localhost:8161/demo 。把 activemq-all-5.3.0.jar 加入 classpath。

JMS发送端代码:
package com.mzh.common.jms;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnectionFactory;

public class Sender {
	public static void main(String[] args) throws Exception {      
	    ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();      
	    Connection connection = connectionFactory.createConnection();      
	    connection.start();      
	     
	    Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);      
	    Destination destination = session.createQueue("queue-hello");      
	     
	    MessageProducer producer = session.createProducer(destination);      
	       
	    TextMessage message = session.createTextMessage();    
	       
	    message.setText("Hello,mazh!");      
	      
	    //通过消息生产者发出消息      
	    producer.send(message);   
	    
	    session.commit();      
	    session.close();      
	    connection.close();      
	}
}



JMS接收端代码:
package com.mzh.common.jms;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Receiver implements MessageListener {
	
	private boolean stop=false;
	
	public void execute() throws Exception{
		ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();      
	     
	    Connection connection = connectionFactory.createConnection();      
	    connection.start();      
	     
	    final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);      
	    Destination destination = session.createQueue("queue-hello");      
	     
	    MessageConsumer consumer = session.createConsumer(destination);     
	    
	    consumer.setMessageListener(this);
	    session.commit();
	    while(!stop){
	    	Thread.sleep(5000);
	    }
	    
	    consumer.close();
	    session.close();      
	    connection.close();    
	}
	public void onMessage(Message message) {
		 TextMessage msg = (TextMessage) message;      
		 try {
			System.out.println("收到消息:" +msg.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}      
	}  
	public static void main(String[] args) throws Exception {      
	      new Receiver().execute();
	}
}


(声明:本文转自http://blog.csdn.net/caihaijiang/article/details/5903296,特别感谢原作者的无私分享。)

猜你喜欢

转载自mazhihui.iteye.com/blog/1587033