从 http://activemq.apache.org/download.html下载MQ的最新版本
1. 点对点消息传递
通过点对点的消息传递模型,一个应用程序可以向另外一个应用程序发送消息。在此传递模型中,目标类型是队列(Queue)。消息首先被传送至队列目标,然后从该队列中将消息传送至对此队列进行监听的某个消费者。
如下图:
一个队列可以关联多个队列发送方和接收方,但一条消息仅传递给一个接收方。如果多个接收方正在监听队列上的消息,JMS Provider将根据“先来者优先”的原则确定由哪个价售房接受下一条消息。如果没有接收方在监听队列,消息将保留在队列中,直至接收方连接到队列为止。这种消息传递模型是传统意义上的拉模型或轮询模型。在此列模型中,消息不时自动推动给客户端的,而是要由客户端从队列中请求获得。
2.源码附上(其实在activeMQ的下载包中,已经有很全的例子了)
生产者:
package com.liujx.activemq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TestProducer {
private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;
private static final String USERNAMW=ActiveMQConnection.DEFAULT_USER;
private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL;
private static Connection connection = null;
private static Session session = null;
private static MessageProducer messageproducer = null;
static{
ConnectionFactory amf = new ActiveMQConnectionFactory(TestProducer.USERNAMW,TestProducer.PASSWORD,TestProducer.URL);
try {
connection = amf.createConnection();
connection.start();
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("liujxTest");
messageproducer = session.createProducer(destination);
} catch (JMSException e) {
e.printStackTrace();
}
}
public static void sendMessage(){
try {
messageproducer.send(session.createTextMessage("aaaaaaaaaa"));
session.commit();
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
sendMessage();
}
}
消费者;
package com.liujx.activemq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TestConsumer {
private static final String PASSWORD=ActiveMQConnection.DEFAULT_PASSWORD;
private static final String USERNAMW=ActiveMQConnection.DEFAULT_USER;
private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL;
private static ConnectionFactory connectionFactory = null;
private static Connection connection = null;
private static Session session = null;
private static MessageConsumer messageConsumer = null;
static{
connectionFactory = new ActiveMQConnectionFactory(USERNAMW,PASSWORD, URL);
try {
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("HelloWorld");
messageConsumer = session.createConsumer(destination);
} catch (JMSException e) {
e.printStackTrace();
}
}
public void getMessages(){
while(true){
try {
TextMessage textMessage = (TextMessage) messageConsumer.receive(10000);
if(textMessage != null){
System.out.println(textMessage.getText());
}else{
break;
}
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new TestConsumer().getMessages();
}
}