在 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,特别感谢原作者的无私分享。)