activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...
ActiveMQ安裝
1. 下載資源
ActiveMQ官網:
版本說明
ActiveMQ5.10.x以上版本必須使用JDK1.8才能正常使用。
ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。
上傳至Linux服務器
解壓安裝文件
tar -zxf apache-activemq-5.9.0-bin.tar.gz
檢查權限
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,才能生效.
activemq.xml
就是spring配置文件. 其中配置的是ActiveMQ應用使用的默認對象組件.
transportConnectors標簽 - 配置鏈接端口信息的. 其中的端口號61616是ActiveMQ對外發布的tcp協議訪問端口. 就是java代碼訪問ActiveMQ時使用的端口.
jetty.xml
spring配置文件, 用于配置jetty服務器的默認對象組件.
jetty是類似tomcat的一個中間件容器.
ActiveMQ默認支持一個網頁版的服務查看站點. 可以實現ActiveMQ中消息相關數據的頁面查看.
8161端口, 是ActiveMQ網頁版管理站點的默認端口.
在ActiveMQ網頁版管理站點中,需要登錄, 默認的用戶名和密碼都是admin.
users.properties
內容信息: 用戶名=密碼
是用于配置客戶端通過協議訪問ActiveMQ時,使用的用戶名和密碼.
啟動ActiveMQ
/usr/local/activemq/bin/activemq start
測試ActiveMQ
檢查進程
ps aux | grep activemq
見到下述內容即代表啟動成功
管理界面
使用瀏覽器訪問ActiveMQ管理應用, 地址如下:
用戶名: admin
密碼: admin
ActiveMQ使用的是jetty提供HTTP服務.啟動稍慢,建議短暫等待再訪問測試.
見到如下界面代表服務啟動成功
修改訪問端口
修改ActiveMQ配置文件: /usr/local/activemq/conf/jetty.xml
配置文件修改完畢,保存并重新啟動ActiveMQ服務。
重啟ActiveMQ
/usr/local/activemq/bin/activemq restart
關閉ActiveMQ
/usr/local/activemq/bin/activemq stop
ActiveMQ應用
1. PTP處理模式(Queue)
消息生產者生產消息發送到queue中,然后消息消費者從queue中取出并且消費消息。
消息被消費以后,queue中不再有存儲,所以消息消費者不可能消費到已經被消費的消息。
Queue支持存在多個消費者,但是對一個消息而言,只會有一個消費者可以消費、其它的則不能消費此消息了。
當消費者不存在時,消息會一直保存,直到有消費消費
Publish/Subscribe處理模式(Topic)
消息生產者(發布)將消息發布到topic中,同時有多個消息消費者(訂閱)消費該消息。
和點對點方式不同,發布到topic的消息會被所有訂閱者消費。
當生產者發布消息,不管是否有消費者。都不會保存消息
一定要先有消息的消費者,后有消息的生產者。
PTP和PUB/SUB簡單對比
ActiveMQ安全認證
ActiveMQ也提供了安全認證。就是用戶名密碼登錄規則。ActiveMQ如果需要使用安全認證的話,必須在activemq的核心配置文件中開啟安全配置。配置文件就是conf/activemq.xml
在conf/activemq.xml配置文件的broker標簽中增加下述內容。
指定了使用JAAS插件管理權限,至于configuration="activemq"是在login.conf文件里定義的
指定了具體的Topic/Queue與用戶組的授權關系
" read="admins" write="admins" admin="admins"/>這個是必須的配置,不能少
開啟認證后,認證使用的用戶信息由其他配置文件提供。
conf/login.config
user代表用戶信息配置文件,group代表用戶組信息配置文件。尋址路徑為相對當前配置文件所在位置開始尋址。
conf/users.properties
conf/groups.properties
ActiveMQ的持久化
ActiveMQ中,持久化是指對消息數據的持久化。在ActiveMQ中,默認的消息是保存在內存中的。當內存容量不足的時候,或ActiveMQ正常關閉的時候,會將內存中的未處理的消息持久化到磁盤中。具體的持久化策略由配置文件中的具體配置決定。
ActiveMQ的默認存儲策略是kahadb。如果使用JDBC作為持久化策略,則會將所有的需要持久化的消息保存到數據庫中。
所有的持久化配置都在conf/activemq.xml中配置,配置信息都在broker標簽內部定義。
1. kahadb方式
是ActiveMQ默認的持久化策略。kahadb是一個文件型數據庫。是使用內存+文件保證數據的持久化的。kahadb可以限制每個數據文件的大小。不代表總計數據容量。
特性是:1、日志形式存儲消息;2、消息索引以B-Tree結構存儲,可以快速更新;3、完全支持JMS事務;4、支持多種恢復機制;
AMQ方式
只適用于5.3版本之前。
AMQ也是一個文件型數據庫,消息信息最終是存儲在文件中。內存中也會有緩存數據。
性能高于JDBC,寫入消息時,會將消息寫入日志文件,由于是順序追加寫,性能很高。為了提升性能,創建消息主鍵索引,并且提供緩存機制,進一步提升性能。每個日志文件的大小都是有限制的(默認32m,可自行配置)。
當超過這個大小,系統會重新建立一個文件。當所有的消息都消費完成,系統會刪除這個文件或者歸檔。
主要的缺點是AMQ Message會為每一個Destination創建一個索引,如果使用了大量的Queue,索引文件的大小會占用很多磁盤空間。
而且由于索引巨大,一旦Broker(ActiveMQ應用實例)崩潰,重建索引的速度會非常慢。
雖然AMQ性能略高于Kaha DB方式,但是由于其重建索引時間過長,而且索引文件占用磁盤空間過大,所以已經不推薦使用。
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。
activeMQ 安裝教程視頻版,可以轉發文章關注然后私信我:“我要提升”,即可獲得更多資料視頻講解
總結
以上是生活随笔為你收集整理的activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android 通知_Android 全
- 下一篇: mysql批量导入数据脚本_MySQL数