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
cp -r apache-activemq-5.9.0 /usr/local/activemq
/usr/local/activemq/conf/* - 配置文件.
須要關注的配置文件有: activemq.xml, jetty.xml, users.properties
任何配置文件修改後,必須重啓ActiveMQ,才能生效.
就是spring配置文件. 其中配置的是ActiveMQ應用使用的默認對象組件.
transportConnectors標籤 - 配置連接端口信息的. 其中的端口號61616是ActiveMQ對外發布的tcp協議訪問端口. 就是java代碼訪問ActiveMQ時使用的端口.
spring配置文件, 用於配置jetty服務器的默認對象組件.
jetty是相似tomcat的一箇中間件容器.
ActiveMQ默認支持一個網頁版的服務查看站點. 能夠實現ActiveMQ中消息相關數據的頁面查看.
8161端口, 是ActiveMQ網頁版管理站點的默認端口.
在ActiveMQ網頁版管理站點中,須要登陸, 默認的用戶名和密碼都是admin.
內容信息: 用戶名=密碼
是用於配置客戶端經過協議訪問ActiveMQ時,使用的用戶名和密碼.
/usr/local/activemq/bin/activemq start
ps aux | grep activemq
見到下述內容即表明啓動成功
使用瀏覽器訪問ActiveMQ管理應用, 地址以下:
用戶名: admin
密碼: admin
ActiveMQ使用的是jetty提供HTTP服務.啓動稍慢,建議短暫等待再訪問測試.
見到以下界面表明服務啓動成功
修改ActiveMQ配置文件: /usr/local/activemq/conf/jetty.xml
配置文件修改完畢,保存並從新啓動ActiveMQ服務。
/usr/local/activemq/bin/activemq restart
/usr/local/activemq/bin/activemq stop
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。