activeMQ 安裝、應用、安全認證、持久化

 

1、 ActiveMQ安裝java

 

1 下載資源mysql

ActiveMQ官網: http://activemq.apache.orgspring

 

 

 

 

 

1.1 版本說明sql

ActiveMQ5.10.x以上版本必須使用JDK1.8才能正常使用。數據庫

ActiveMQ5.9.x及如下版本使用JDK1.7便可正常使用。apache

 

2 上傳至Linux服務器瀏覽器

 

3 解壓安裝文件緩存

tar -zxf apache-activemq-5.9.0-bin.tar.gztomcat

 

4 檢查權限安全

ls -al apache-activemq-5.9.0/bin

若是權限不足,則沒法執行,須要修改文件權限:

chmod 755 activemq

 

5 複製應用至本地目錄

cp -r apache-activemq-5.9.0 /usr/local/activemq

 

6 配置文件簡介

/usr/local/activemq/conf/* - 配置文件.

須要關注的配置文件有: activemq.xml, jetty.xml, users.properties

任何配置文件修改後,必須重啓ActiveMQ,才能生效.

 

6.1 activemq.xml

就是spring配置文件. 其中配置的是ActiveMQ應用使用的默認對象組件.

transportConnectors標籤 - 配置連接端口信息的. 其中的端口號61616是ActiveMQ對外發布的tcp協議訪問端口. 就是java代碼訪問ActiveMQ時使用的端口.

 

6.2 jetty.xml

spring配置文件, 用於配置jetty服務器的默認對象組件.

jetty是相似tomcat的一箇中間件容器.

ActiveMQ默認支持一個網頁版的服務查看站點. 能夠實現ActiveMQ中消息相關數據的頁面查看.

8161端口, 是ActiveMQ網頁版管理站點的默認端口.

在ActiveMQ網頁版管理站點中,須要登陸, 默認的用戶名和密碼都是admin.

 

6.3 users.properties

內容信息: 用戶名=密碼

是用於配置客戶端經過協議訪問ActiveMQ時,使用的用戶名和密碼.

 

7 啓動ActiveMQ

/usr/local/activemq/bin/activemq start

 

8 測試ActiveMQ

 

8.1 檢查進程

ps aux | grep activemq

見到下述內容即表明啓動成功

 

 

 

8.2 管理界面

使用瀏覽器訪問ActiveMQ管理應用, 地址以下:

http://ip:8161/admin/

用戶名: admin

密碼: admin

ActiveMQ使用的是jetty提供HTTP服務.啓動稍慢,建議短暫等待再訪問測試.

見到以下界面表明服務啓動成功

 

 

 

8.3 修改訪問端口

修改ActiveMQ配置文件: /usr/local/activemq/conf/jetty.xml

 

 

配置文件修改完畢,保存並從新啓動ActiveMQ服務。

 

9 重啓ActiveMQ

/usr/local/activemq/bin/activemq restart

 

10 關閉ActiveMQ

/usr/local/activemq/bin/activemq stop

 

2、 ActiveMQ應用

 

1 PTP處理模式(Queue)

消息生產者生產消息發送到queue中,而後消息消費者從queue中取出而且消費消息。

消息被消費之後,queue中再也不有存儲,因此消息消費者不可能消費到已經被消費的消息。

Queue支持存在多個消費者,可是對一個消息而言,只會有一個消費者能夠消費、其它的則不能消費此消息了。

當消費者不存在時,消息會一直保存,直到有消費消費

 

 

2 Publish/Subscribe處理模式(Topic)

消息生產者(發佈)將消息發佈到topic中,同時有多個消息消費者(訂閱)消費該消息。

和點對點方式不一樣,發佈到topic的消息會被全部訂閱者消費。

當生產者發佈消息,不論是否有消費者。都不會保存消息

必定要先有消息的消費者,後有消息的生產者。

 

3 PTP和PUB/SUB簡單對比

 

3、 ActiveMQ安全認證

ActiveMQ也提供了安全認證。就是用戶名密碼登陸規則。ActiveMQ若是須要使用安全認證的話,必須在activemq的核心配置文件中開啓安全配置。配置文件就是conf/activemq.xml

在conf/activemq.xml配置文件的broker標籤中增長下述內容。

<jaasAuthenticationPlugin configuration="activemq" />指定了使用JAAS插件管理權限,至於configuration="activemq"是在login.conf文件裏定義的

<authorizationEntry topic="名字" read="用戶組名" write="用戶組名" admin="用戶組名" />指定了具體的Topic/Queue與用戶組的受權關係

<authorizationEntry topic="ActiveMQ.Advisory.>" read="admins" write="admins" admin="admins"/>這個是必須的配置,不能少

開啓認證後,認證使用的用戶信息由其餘配置文件提供。

conf/login.config

user表明用戶信息配置文件,group表明用戶組信息配置文件。尋址路徑爲相對當前配置文件所在位置開始尋址。

 

4、 ActiveMQ的持久化

ActiveMQ中,持久化是指對消息數據的持久化。在ActiveMQ中,默認的消息是保存在內存中的。當內存容量不足的時候,或ActiveMQ正常關閉的時候,會將內存中的未處理的消息持久化到磁盤中。具體的持久化策略由配置文件中的具體配置決定。

ActiveMQ的默認存儲策略是kahadb。若是使用JDBC做爲持久化策略,則會將全部的須要持久化的消息保存到數據庫中。

全部的持久化配置都在conf/activemq.xml中配置,配置信息都在broker標籤內部定義。

 

1 kahadb方式

是ActiveMQ默認的持久化策略。kahadb是一個文件型數據庫。是使用內存+文件保證數據的持久化的。kahadb能夠限制每一個數據文件的大小。不表明總計數據容量。

特性是:一、日誌形式存儲消息;二、消息索引以B-Tree結構存儲,能夠快速更新;三、徹底支持JMS事務;四、支持多種恢復機制;

 

2 AMQ方式

只適用於5.3版本以前。

AMQ也是一個文件型數據庫,消息信息最終是存儲在文件中。內存中也會有緩存數據。

性能高於JDBC,寫入消息時,會將消息寫入日誌文件,因爲是順序追加寫,性能很高。爲了提高性能,建立消息主鍵索引,而且提供緩存機制,進一步提高性能。每一個日誌文件的大小都是有限制的(默認32m,可自行配置)。

當超過這個大小,系統會從新創建一個文件。當全部的消息都消費完成,系統會刪除這個文件或者歸檔。

主要的缺點是AMQ Message會爲每個Destination建立一個索引,若是使用了大量的Queue,索引文件的大小會佔用不少磁盤空間。

並且因爲索引巨大,一旦Broker(ActiveMQ應用實例)崩潰,重建索引的速度會很是慢。

雖然AMQ性能略高於Kaha DB方式,可是因爲其重建索引時間過長,並且索引文件佔用磁盤空間過大,因此已經不推薦使用。

 

3 JDBC持久化方式

ActiveMQ將數據持久化到數據庫中。 不指定具體的數據庫。 可使用任意的數據庫中。 本環節中使用MySQL數據庫。

下述文件爲activemq.xml配置文件部份內容。不要徹底複製。

首先定義一個mysql-ds的MySQL數據源,而後在persistenceAdapter節點中配置jdbcPersistenceAdapter而且引用剛纔定義的數據源。

dataSource指定持久化數據庫的bean,createTablesOnStartup是否在啓動的時候建立數據表,默認值是true,這樣每次啓動都會去建立數據表了,通常是第一次啓動的時候設置爲true,以後改爲false。

配置成功後,須要在數據庫中建立對應的database,不然沒法訪問。表格ActiveMQ能夠自動建立。

activemq_msgs用於存儲消息,Queue和Topic都存儲在這個表中:

ID:自增的數據庫主鍵

CONTAINER:消息的Destination

MSGID_PROD:消息發送者客戶端的主鍵

MSG_SEQ:是發送消息的順序,MSGID_PROD+MSG_SEQ能夠組成JMS的MessageID

EXPIRATION:消息的過時時間,存儲的是從1970-01-01到如今的毫秒數

MSG:消息本體的Java序列化對象的二進制數據

PRIORITY:優先級,從0-9,數值越大優先級越高

activemq_acks用於存儲訂閱關係。若是是持久化Topic,訂閱者和服務器的訂閱關係在這個表保存:

主要的數據庫字段以下:

CONTAINER:消息的Destination

SUB_DEST:若是是使用Static集羣,這個字段會有集羣其餘系統的信息

CLIENT_ID:每一個訂閱者都必須有一個惟一的客戶端ID用以區分

SUB_NAME:訂閱者名稱

SELECTOR:選擇器,能夠選擇只消費知足條件的消息。條件能夠用自定義屬性實現,可支持多屬性AND和OR操做

LAST_ACKED_ID:記錄消費過的消息的ID。

表activemq_lock在集羣環境中才有用,只有一個Broker能夠得到消息,稱爲Master Broker,

其餘的只能做爲備份等待Master Broker不可用,纔可能成爲下一個Master Broker。 這個表用於記錄哪一個Broker是當前的Master Broker。

只有在消息必須保證有效,且絕對不能丟失的時候。使用JDBC存儲策略。

若是消息能夠容忍丟失,或使用集羣/主備模式保證數據安全的時候,建議使用levelDB或Kahadb。

相關文章
相關標籤/搜索