本文作者:Zhang Phil
原文連結:
http://blog.csdn.net/zhangphil/article/details/48173665ActiveMQ安裝配置和使用簡例
ActiveMQ是一套JMS(Java Message Service)開源消息服務實作的元件。以Windows作業系統為例,本文簡述了ActiveMQ的安裝配置和使用簡例。消息服務是網際網路應用的最基本功能,隻要是網際網路應用,就少不了消息通信。而ActiveMQ是一個相對比較成熟穩定的JMS消息服務元件,安裝簡單,使用簡單,可以快速上手。很容易就實作當下很多應用的消息推送、使用者回報等消息服務功能。
安裝和使用方法
(1)首先到ActiveMQ官方網站下載下傳最新釋出的ActiveMQ版本:
http://activemq.apache.org/download.html 以ActiveMQ 5.12.0為例,apache-activemq-5.12.0-bin.zip的下載下傳連結位址: http://www.apache.org/dyn/closer.cgi?path=/activemq/5.12.0/apache-activemq-5.12.0-bin.zip(2)下載下傳後,将這個壓縮包解壓,找到解壓目錄下的 …\apache-activemq-5.12.0-bin\apache-activemq-5.12.0\bin\win64\activemq.bat 檔案,(32位計算機則選擇win32目錄下的activemq.bat)運作之。
其中 …\apache-activemq-5.12.0-bin\apache-activemq-5.12.0\activemq-all-5.12.0.jar将在後面的Java程式中作為引用的庫包導入使用。
注意!運作activemq.bat前提需要java運作環境。啟動成功後如圖所示:
ActiveMQ預設綁定本地端口61616,如果一切順利,啟動ActiveMQ成功後,可以執行指令:
netstat -an|find "61616"
檢視到端口61616的狀态如圖:
表明ActiveMQ消息伺服器端啟動已經成功,已經在端口61616收發消息。
(3)下面就可以使用ActiveMQ在自己的Java程式中編寫代碼收發消息。以兩個java應用程式為例,一個單獨的Sender.java作為消息的發送方,另外一個Receiver.java作為消息的接收方。
Sender.java
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.JMSException;
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 String MESSAGE_QUEUE="zhangphil";
//預設的ActiveMQ伺服器端綁定的端口。
private static final int PORT=61616;
//發送10條消息。
private static final int COUNT = 10;
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;
// 構造ConnectionFactory執行個體對象,此處采用ActiveMq的實作jar
connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:"+PORT);
try {
// 構造從工廠得到連接配接對象
connection = connectionFactory.createConnection();
// 啟動
connection.start();
// 擷取操作連接配接
session = connection.createSession(Boolean.TRUE.booleanValue(), Session.AUTO_ACKNOWLEDGE);
// 擷取session注意參數值 zhangphil 是一個伺服器的queue,須在在ActiveMq的console配置
destination = session.createQueue(MESSAGE_QUEUE);
// 得到消息生成者,發送者
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){
for (int i = 0; i <COUNT; i++) {
TextMessage message = null;
try {
message = session.createTextMessage("zhangphil message "+i);
} catch (JMSException e) {
e.printStackTrace();
}
// 發送消息到目的地方
try {
producer.send(message);
System.out.println("發送消息:"+message.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
Receiver.java
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 {
private static final String MESSAGE_QUEUE="zhangphil";
private final static int PORT=61616;
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://127.0.0.1:"+PORT);
try {
// 構造從工廠得到連接配接對象
connection = connectionFactory.createConnection();
// 啟動
connection.start();
// 擷取操作連接配接
session = connection.createSession(Boolean.FALSE.booleanValue(), Session.AUTO_ACKNOWLEDGE);
// 擷取session注意參數值 zhangphil 是一個伺服器的queue,隻接受相同message queue字段的消息。
destination = session.createQueue(MESSAGE_QUEUE);
consumer = session.createConsumer(destination);
while (true) {
TextMessage message = (TextMessage) consumer.receive(1000);
if (null != message) {
System.out.println("收到消息: " + message.getText());
} else {
//如果不break,receiver将輪詢接收消息。
//break,Receiver.java退出。
//break;
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
}
編譯上述兩個java檔案,需要導入ActiveMQ的jar庫包。将(2)中的…\apache-activemq-5.12.0-bin\apache-activemq-5.12.0\activemq-all-5.12.0.jar作為庫包導入進來。
ActiveMQ的基本配置
ActiveMQ預設的系統配置網頁是:
http://localhost:8161/admin/使用者名和密碼預設均是: admin