1.下載下傳ActiveMQ
去官方網站下載下傳:http://activemq.apache.org/
2.運作ActiveMQ
解壓縮apache-activemq-5.5.1-bin.zip,然後輕按兩下apache-activemq-5.5.1\bin\activemq.bat運作ActiveMQ程式。
啟動ActiveMQ以後,登陸:http://localhost:8161/admin/,建立一個Queue,命名為FirstQueue。
3.建立Eclipse項目并運作
建立project:ActiveMQ-5.5,并導入apache-activemq-5.5.1\lib目錄下需要用到的jar檔案,項目結構如下圖所示:

3.1.Sender.java
com.xuwei.activemq;
javax.jms.Connection;
javax.jms.ConnectionFactory;
javax.jms.DeliveryMode;
javax.jms.Destination;
javax.jms.MessageProducer;
javax.jms.Session;
javax.jms.TextMessage;
org.apache.activemq.ActiveMQConnection;
org.apache.activemq.ActiveMQConnectionFactory;
Sender {
SEND_NUMBER = 5;
main(String[] args) {
ConnectionFactory connectionFactory;
Connection connection = ;
Session session;
Destination destination;
MessageProducer producer;
connectionFactory = ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
{
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.TRUE,
Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("FirstQueue");
producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
sendMessage(session, producer);
session.commit();
} (Exception e) {
e.printStackTrace();
} {
{
( != connection)
connection.close();
} (Throwable ignore) {
}
}
}
sendMessage(Session session, MessageProducer producer)
Exception {
( i = 1; i <= SEND_NUMBER; i++) {
TextMessage message = session
.createTextMessage("ActiveMq 發送的消息" + i);
System.out.println("發送消息:" + "ActiveMq 發送的消息" + i);
producer.send(message);
}
}
}
3.2.Receiver.java
com.xuwei.activemq;
javax.jms.Connection;
javax.jms.ConnectionFactory;
javax.jms.Destination;
javax.jms.MessageConsumer;
javax.jms.Session;
javax.jms.TextMessage;
org.apache.activemq.ActiveMQConnection;
org.apache.activemq.ActiveMQConnectionFactory;
Receiver {
main(String[] args) {
ConnectionFactory connectionFactory;
Connection connection = ;
Session session;
Destination destination;
MessageConsumer consumer;
connectionFactory = ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"tcp://localhost:61616");
{
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.FALSE,
Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("FirstQueue");
consumer = session.createConsumer(destination);
() {
TextMessage message = (TextMessage) consumer.receive(100000);
( != message) {
System.out.println("收到消息" + message.getText());
} {
;
}
}
} (Exception e) {
e.printStackTrace();
} {
{
( != connection)
connection.close();
} (Throwable ignore) {
}
}
}
}
4.注意事項
- 最後接收者跟發送者在不同的機器上測試
- 項目所引用的jar最後在ActiveMQ下的lib中找,這樣不會出現版本沖突。
5.測試過程
因為是在單機上測試,是以需要開啟兩個eclipse,每一個eclipse都有自身的workspace。我們在eclipse1中運作Receiver,在eclipse2中運作Sender。
剛開始eclipse1中運作Receiver以後console介面沒有任何資訊,在eclipse2中運作Sender以後,eclipse2中的console顯示如下資訊:
發送消息:ActiveMq 發送的消息1
發送消息:ActiveMq 發送的消息2
發送消息:ActiveMq 發送的消息3
發送消息:ActiveMq 發送的消息4
發送消息:ActiveMq 發送的消息5
而回到eclipse1中發現console界面出現如下資訊:
收到消息ActiveMq 發送的消息1
收到消息ActiveMq 發送的消息2
收到消息ActiveMq 發送的消息3
收到消息ActiveMq 發送的消息4
收到消息ActiveMq 發送的消息5
PS:2012-2-27
今天發現測試并不需要開啟兩個eclipse,在一個eclipse下頁可以啟動多個程式,并且有多個console,在上面的Receiver.java中,設定一個較大的時間,比如receive(500000),如下代碼所示:
TextMessage message = (TextMessage) consumer.receive(500000);
這個時候運作Receiver.java的話,會使得這個Receiver.java一直運作500秒,在eclipse中可以發現:
點選那個紅色方塊可以手動停止運作程式。