企业中各项目中相互协作的时候可能用得到消息通知机制。比如有东西更新了,可以通知做索引。
在 Java 里有 JMS 的多个实现。其中 apache 下的 ActiveMQ 就是不错的选择。ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。这里示例下使用 ActiveMQ
用 ActiveMQ 最好还是了解下 JMS
[img]http://dl.iteye.com/upload/attachment/0070/6685/60353613-15e6-3752-a1ca-fcab86feb975.jpg[/img]
JMS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。
ConnectionFactory 是连接工厂,负责创建Connection。
Connection 负责创建 Session。
Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。
Destination 是消息的目的地。
详细的可以网上找些 JMS 规范(有中文版)。
下载 apache-activemq-5.3.0([url]http://activemq.apache.org/download.html[/url] ),解压,然后双击 bin/activemq.bat。运行后,可以在 http://localhost:8161/admin 观察。也有 demo, http://localhost:8161/demo 。把 activemq-all-5.3.0.jar 加入 classpath。
JMS发送端代码:
JMS接收端代码:
[color=darkred][b](声明:本文转自[url]http://blog.csdn.net/caihaijiang/article/details/5903296[/url],特别感谢原作者的无私分享。)[/b][/color]
在 Java 里有 JMS 的多个实现。其中 apache 下的 ActiveMQ 就是不错的选择。ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。这里示例下使用 ActiveMQ
用 ActiveMQ 最好还是了解下 JMS
[img]http://dl.iteye.com/upload/attachment/0070/6685/60353613-15e6-3752-a1ca-fcab86feb975.jpg[/img]
JMS 定义了两种方式:Quere(点对点);Topic(发布/订阅)。
ConnectionFactory 是连接工厂,负责创建Connection。
Connection 负责创建 Session。
Session 创建 MessageProducer(用来发消息) 和 MessageConsumer(用来接收消息)。
Destination 是消息的目的地。
详细的可以网上找些 JMS 规范(有中文版)。
下载 apache-activemq-5.3.0([url]http://activemq.apache.org/download.html[/url] ),解压,然后双击 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();
}
}
[color=darkred][b](声明:本文转自[url]http://blog.csdn.net/caihaijiang/article/details/5903296[/url],特别感谢原作者的无私分享。)[/b][/color]