您好,登錄后才能下訂單哦!
這篇文章主要介紹“Docker搭建ActiveMQ消息服務的方法”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Docker搭建ActiveMQ消息服務的方法”文章能幫助大家解決問題。
概念
jms消息模式
點對點或隊列模式
包含三個角色:消息隊列(queue),發送者(sender),接收者(receiver)。每個消息都被發送到一個特定的隊列,接收者從隊列中獲取消息。隊列保留著消息,直到他們被消費或超時。
每個消息只有一個消費者(consumer),即一旦被消費,消息就不再在消息隊列中
發送者和接收者之間在時間上沒有依賴性,也就是說當發送者發送了消息之后,不管接收者有沒有正在運行,它不會影響到消息被發送到隊列
接收者在成功接收消息之后需向隊列應答成功
pub/sub 發布/訂閱模式
包含三個角色:主題(topic),發布者(publisher),訂閱者(subscriber) 。多個發布者將消息發送到topic,系統將這些消息傳遞給多個訂閱者。
每個消息可以有多個消費者
發布者和訂閱者之間有時間上的依賴性。針對某個主題(topic)的訂閱者,它必須創建一個訂閱者之后,才能消費發布者的消息。
為了消費消息,訂閱者必須保持運行的狀態。
為了緩和這樣嚴格的時間相關性,jms允許訂閱者創建一個可持久化的訂閱。這樣,即使訂閱者沒有被激活(運行),它也能接收到發布者的消息。
如果希望發送的消息可以不被做任何處理、或者只被一個消息者處理、或者可以被多個消費者處理的話,那么可以采用pub/sub模型。
jms消息基本組件
connectionfactory
創建connection對象的工廠,針對兩種不同的jms消息模型,分別有queueconnectionfactory和topicconnectionfactory兩種。可以通過jndi來查找connectionfactory對象。
destination
destination的意思是消息生產者的消息發送目標或者說消息消費者的消息來源。對于消息生產者來說,它的destination是某個隊列(queue)或某個主題(topic);對于消息消費者來說,它的destination也是某個隊列或主題(即消息來源)。
所以,destination實際上就是兩種類型的對象:queue、topic可以通過jndi來查找destination。
connection
connection表示在客戶端和jms系統之間建立的鏈接(對tcp/ip socket的包裝)。connection可以產生一個或多個session。跟connectionfactory一樣,connection也有兩種類型:queueconnection和topicconnection。
session
session是操作消息的接口。可以通過session創建生產者、消費者、消息等。session提供了事務的功能。當需要使用session發送/接收多個消息時,可以將這些發送/接收動作放到一個事務中。同樣,也分queuesession和topicsession。
消息的生產者
消息生產者由session創建,并用于將消息發送到destination。同樣,消息生產者分兩種類型:queuesender和topicpublisher。可以調用消息生產者的方法(send或publish方法)發送消息。
消息消費者
消息消費者由session創建,用于接收被發送到destination的消息。兩種類型:queuereceiver和topicsubscriber。可分別通過session的createreceiver(queue)或createsubscriber(topic)來創建。當然,也可以session的creatdurablesubscriber方法來創建持久化的訂閱者。
messagelistener
消息監聽器。如果注冊了消息監聽器,一旦消息到達,將自動調用監聽器的onmessage方法。ejb中的mdb(message-driven bean)就是一種messagelistener。
transport傳輸方式
activemq目前支持的transport有:vm transport、tcp transport、nio transport、ssl transport、peer transport、udp transport、multicast transport、http and https transport、websockets transport、failover transport、fanout transport、discovery transport、zeroconf transport等。
vm transport:允許客戶端和broker直接在vm內部通信,采用的連接不是socket連接,而是直接的方法調用,從而避免了網絡傳輸的開銷。應用場景也僅限于broker和客戶端在同一jvm環境下。
tcp transport:客戶端通過tcp socket連接到遠程broker。配置語法:
tcp://hostname:port?transportoptions
http and https transport:允許客戶端使用rest或者ajax的方式進行連接。這意味著可以直接使用javascript向activemq發送消息。
websockets transport:允許客戶端通過html5標準的websockets方式連接到broker。
failover transport:青龍系統mq采用的就是這種連接方式。這種方式具備自動重新連接的機制,工作在其他transport的上層,用于建立可靠的傳輸。允許配置任意多個的uri,該機制將會自動選擇其中的一個uri來嘗試連接。配置語法:
failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportoptions
fanout transport:主要適用于生產消息發向多個代理。如果多個代理出現環路,可能造成消費者接收重復的消息。所以,使用該協議時,最好將消息發送給多個不相連接的代理。
persistence持久化存儲
amq message store
activemq 5.0 的缺省持久化存儲方式。
kaha persistence
這是一個專門針對消息持久化的解決方案。它對典型的消息使用模式進行了優化。
jdbc persistence
目前支持的數據庫有:apache derby, axion, db2, hsql, informix, maxdb, mysql, oracle, postgresql, sqlserver, sybase。
disable persistence
不應用持久化存儲。
集群方案(master / slave)
pure master slave
無單點故障;
不需要依賴共享文件系統或是共享數據庫,使用 kahadb的方式持久化存儲;
一個master只能帶一個slave;
master工作期間,會將消息狀況自動同步到slave;
master一旦崩潰,slave自動接替其工作,已發送并尚未消費的消息繼續有效;
slave接手后,必須停止slave才能重啟先前的master;
shared file system master slave
jdbc master slave
配置上,不存在master和slave的區分,多個共享數據源的broker構成jdbc master slave;
首先搶到資源(數據庫鎖)的broker成為master,其他broker定期嘗試搶占資源;
一旦master崩潰,其他broker搶占資源,最終只有一臺搶到,立刻成為master,之前的master即便重啟成功,也只能作為slave等待;
安裝說明
這里使用docker安裝,查詢docker鏡像:
docker search activemq
下載docker鏡像:
docker pull webcenter/activemq
創建&運行activemq容器:
docker run -d --name myactivemq -p 61617:61616 -p 8162:8161 webcenter/activemq
61616是 activemq 的容器使用端口(映射為61617),8161是 web 頁面管理端口(對外映射為8162)
查看創建的容器,如果存在說明安裝成功:
docker ps
查看web管理頁面:
瀏覽器輸入 http://ip :8162 點擊manage activemq broker使用默認賬號/密碼:admin/admin進入查看。
配置訪問密碼
進入docker容器:
docker exec -it myactivemq /bin/bash
控制臺界面設置用戶名和密碼:
# 位于根目錄 conf 目錄下 vi jetty-realm.properties # 修改密碼 # username: password [,rolename ...] admin: admin, admin
配置連接密碼
編輯activemq.xml文件,放置到 shutdownhooks 下方即可。
<!-- 添加訪問activemq的賬號密碼 --> <plugins> <simpleauthenticationplugin> <users> <authenticationuser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/> </users> </simpleauthenticationplugin> </plugins>
修改conf中credentials.properties文件進行密碼設置:
activemq.username=admin activemq.password=123456 guest.password=123456
注意事項
如果是云服務器,記得開放相關端口(61617/8160)
關于“Docker搭建ActiveMQ消息服務的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。