詳見:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt180
1.下載ActiveMQ
去官方網站下載:http://activemq.apache.org/
我下載的時候是 ActiveMQ 5.8.0 Release版
2.運行ActiveMQ
解壓縮apache-activemq-5.8.0-bin.zip,然后雙擊apache-activemq-5.5.1\bin\activemq.bat運行ActiveMQ程序。
啟動ActiveMQ以后,登陸:http://localhost:8161/admin/,創建一個Queue,命名為FirstQueue。
3.創建Eclipse項目並運行
創建java project:ActiveMQ-5.8,新建lib文件夾
打開apache-activemq-5.8.0\lib目錄
拷貝
activemq-broker-5.8.0.jar
activemq-client-5.8.0.jar
geronimo-j2ee-management_1.1_spec-1.0.1.jar
geronimo-jms_1.1_spec-1.1.1.jar
slf4j-api-1.6.6.jar
這5個jar文件到lib文件夾中,並Build Path->Add to Build Path
結構如圖:
Sender.java
-
package com.lm.activemq;
-
-
/**
-
* @Header: Sender.java
-
* 類描述:
-
* @author: lm
-
* @date 2013-7-17 上午10:52:42
-
* @Email
-
* @company 歡
-
* @addr 北京市朝陽區勁松
-
*/
-
import javax.jms.Connection;
-
import javax.jms.ConnectionFactory;
-
import javax.jms.DeliveryMode;
-
import javax.jms.Destination;
-
import javax.jms.MessageProducer;
-
import javax.jms.Session;
-
import javax.jms.TextMessage;
-
import org.apache.activemq.ActiveMQConnection;
-
import org.apache.activemq.ActiveMQConnectionFactory;
-
-
public class Sender {
-
private static final int SEND_NUMBER = 5;
-
-
public static void main(String[] args) {
-
// ConnectionFactory :連接工廠,JMS 用它創建連接
-
ConnectionFactory connectionFactory; // Connection :JMS 客戶端到JMS
-
// Provider 的連接
-
Connection connection = null; // Session: 一個發送或接收消息的線程
-
Session session; // Destination :消息的目的地;消息發送給誰.
-
Destination destination; // MessageProducer:消息發送者
-
MessageProducer producer; // TextMessage message;
-
// 構造ConnectionFactory實例對象,此處采用ActiveMq的實現jar
-
connectionFactory = new ActiveMQConnectionFactory(
-
ActiveMQConnection.DEFAULT_USER,
-
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
-
try { // 構造從工廠得到連接對象
-
connection = connectionFactory.createConnection();
-
// 啟動
-
connection.start();
-
// 獲取操作連接
-
session = connection.createSession(Boolean.TRUE,
-
Session.AUTO_ACKNOWLEDGE);
-
// 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置
-
destination = session.createQueue("FirstQueue");
-
// 得到消息生成者【發送者】
-
producer = session.createProducer(destination);
-
// 設置不持久化,此處學習,實際根據項目決定
-
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
-
// 構造消息,此處寫死,項目就是參數,或者方法獲取
-
sendMessage(session, producer);
-
session.commit();
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
if (null != connection)
-
connection.close();
-
} catch (Throwable ignore) {
-
}
-
}
-
}
-
-
public static void sendMessage(Session session, MessageProducer producer)
-
throws Exception {
-
for (int i = 1; i <= SEND_NUMBER; i++) {
-
TextMessage message = session.createTextMessage("ActiveMq 發送的消息"
-
+ i);
-
// 發送消息到目的地方
-
-
System.out.println("發送消息:" + "ActiveMq 發送的消息" + i);
-
producer.send(message);
-
}
-
}
-
}
Receiver.java
-
package com.lm.activemq;
-
-
/**
-
* @Header: Receiver.java
-
* 類描述:
-
* @author: lm
-
* @date 2013-7-17 上午10:52:58
-
* @Email
-
* @company 歡
-
* @addr 北京市朝陽區勁松
-
*/
-
import javax.jms.Connection;
-
import javax.jms.ConnectionFactory;
-
import javax.jms.Destination;
-
import javax.jms.MessageConsumer;
-
import javax.jms.Session;
-
import javax.jms.TextMessage;
-
import org.apache.activemq.ActiveMQConnection;
-
import org.apache.activemq.ActiveMQConnectionFactory;
-
-
public class Receiver {
-
public static void main(String[] args) {
-
// ConnectionFactory :連接工廠,JMS 用它創建連接
-
ConnectionFactory connectionFactory;
-
// Connection :JMS 客戶端到JMS Provider 的連接
-
Connection connection = null;
-
// Session: 一個發送或接收消息的線程
-
Session session;
-
// Destination :消息的目的地;消息發送給誰.
-
Destination destination;
-
// 消費者,消息接收者
-
MessageConsumer consumer;
-
connectionFactory = new ActiveMQConnectionFactory(
-
ActiveMQConnection.DEFAULT_USER,
-
ActiveMQConnection.DEFAULT_PASSWORD, "tcp://localhost:61616");
-
try {
-
// 構造從工廠得到連接對象
-
connection = connectionFactory.createConnection();
-
// 啟動
-
connection.start();
-
// 獲取操作連接
-
session = connection.createSession(Boolean.FALSE,
-
Session.AUTO_ACKNOWLEDGE);
-
// 獲取session注意參數值xingbo.xu-queue是一個服務器的queue,須在在ActiveMq的console配置
-
destination = session.createQueue("FirstQueue");
-
consumer = session.createConsumer(destination);
-
while (true) {
-
// 設置接收者接收消息的時間,為了便於測試,這里誰定為100s
-
TextMessage message = (TextMessage) consumer.receive(100000);
-
if (null != message) {
-
System.out.println("收到消息" + message.getText());
-
} else {
-
break;
-
}
-
}
-
} catch (Exception e) {
-
e.printStackTrace();
-
} finally {
-
try {
-
if (null != connection)
-
connection.close();
-
} catch (Throwable ignore) {
-
}
-
}
-
}
-
}
5.測試過程
先運行:Receiver.java
再運行:Sender.java
可以看到結果
Sender運行后:
發送消息:ActiveMq 發送的消息1
發送消息:ActiveMq 發送的消息2
發送消息:ActiveMq 發送的消息3
發送消息:ActiveMq 發送的消息4
發送消息:ActiveMq 發送的消息5
Receiver運行后:
收到消息ActiveMq 發送的消息1
收到消息ActiveMq 發送的消息2
收到消息ActiveMq 發送的消息3
收到消息ActiveMq 發送的消息4
收到消息ActiveMq 發送的消息5
要想看到不同的輸出內容,通過點擊如下圖的按鈕切換console
在Receiver.java中,可以設置一個時間,比如receive(500000),如下代碼所示:
-
TextMessage message = (TextMessage) consumer.receive(500000);
這個時候運行Receiver.java的話,會使得這個Receiver.java一直運行500秒,在eclipse中可以發現:
點擊那個紅色方塊可以手動停止運行程序