天天看點

ActiveMQ安裝配置和使用簡例

本文作者:Zhang Phil

原文連結:

http://blog.csdn.net/zhangphil/article/details/48173665

ActiveMQ安裝配置和使用簡例

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