這篇文章給大家分享的是有關(guān)Docker中如何搭建ActiveMQ消息服務(wù)的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到東烏珠穆沁網(wǎng)站設(shè)計(jì)與東烏珠穆沁網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類(lèi)型包括:網(wǎng)站制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國(guó)際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋東烏珠穆沁地區(qū)。
前言
ActiveMQ 是Apache出品,最流行的,能力強(qiáng)勁的開(kāi)源消息總線。ActiveMQ 是一個(gè)完全支持JMS1.1和J2EE 1.4規(guī)范的 JMS Provider實(shí)現(xiàn),盡管JMS規(guī)范出臺(tái)已經(jīng)是很久的事情了,但是JMS在當(dāng)今的J2EE應(yīng)用中間仍然扮演著特殊的地位。
在生產(chǎn)項(xiàng)目中,很多時(shí)候需要消息中間件來(lái)進(jìn)行分布式系統(tǒng)間的通信。它具有低耦合、可靠投遞、廣播、流量控制、最終一致性等一系列功能。本篇主要介紹ActiveMQ 相關(guān)概念以及安裝說(shuō)明,后面會(huì)著重介紹 SpringBoot 集成實(shí)現(xiàn)秒殺消息隊(duì)列。
概念
JMS消息模式
點(diǎn)對(duì)點(diǎn)或隊(duì)列模式
包含三個(gè)角色:消息隊(duì)列(Queue),發(fā)送者(Sender),接收者(Receiver)。每個(gè)消息都被發(fā)送到一個(gè)特定的隊(duì)列,接收者從隊(duì)列中獲取消息。隊(duì)列保留著消息,直到他們被消費(fèi)或超時(shí)。
每個(gè)消息只有一個(gè)消費(fèi)者(Consumer),即一旦被消費(fèi),消息就不再在消息隊(duì)列中
發(fā)送者和接收者之間在時(shí)間上沒(méi)有依賴性,也就是說(shuō)當(dāng)發(fā)送者發(fā)送了消息之后,不管接收者有沒(méi)有正在運(yùn)行,它不會(huì)影響到消息被發(fā)送到隊(duì)列
接收者在成功接收消息之后需向隊(duì)列應(yīng)答成功
Pub/Sub 發(fā)布/訂閱模式
包含三個(gè)角色:主題(Topic),發(fā)布者(Publisher),訂閱者(Subscriber) 。多個(gè)發(fā)布者將消息發(fā)送到Topic,系統(tǒng)將這些消息傳遞給多個(gè)訂閱者。
每個(gè)消息可以有多個(gè)消費(fèi)者
發(fā)布者和訂閱者之間有時(shí)間上的依賴性。針對(duì)某個(gè)主題(Topic)的訂閱者,它必須創(chuàng)建一個(gè)訂閱者之后,才能消費(fèi)發(fā)布者的消息。
為了消費(fèi)消息,訂閱者必須保持運(yùn)行的狀態(tài)。
為了緩和這樣嚴(yán)格的時(shí)間相關(guān)性,JMS允許訂閱者創(chuàng)建一個(gè)可持久化的訂閱。這樣,即使訂閱者沒(méi)有被激活(運(yùn)行),它也能接收到發(fā)布者的消息。
如果希望發(fā)送的消息可以不被做任何處理、或者只被一個(gè)消息者處理、或者可以被多個(gè)消費(fèi)者處理的話,那么可以采用Pub/Sub模型。
JMS消息基本組件
ConnectionFactory
創(chuàng)建Connection對(duì)象的工廠,針對(duì)兩種不同的jms消息模型,分別有QueueConnectionFactory和TopicConnectionFactory兩種。可以通過(guò)JNDI來(lái)查找ConnectionFactory對(duì)象。
Destination
Destination的意思是消息生產(chǎn)者的消息發(fā)送目標(biāo)或者說(shuō)消息消費(fèi)者的消息來(lái)源。對(duì)于消息生產(chǎn)者來(lái)說(shuō),它的Destination是某個(gè)隊(duì)列(Queue)或某個(gè)主題(Topic);對(duì)于消息消費(fèi)者來(lái)說(shuō),它的Destination也是某個(gè)隊(duì)列或主題(即消息來(lái)源)。
所以,Destination實(shí)際上就是兩種類(lèi)型的對(duì)象:Queue、Topic可以通過(guò)JNDI來(lái)查找Destination。
Connection
Connection表示在客戶端和JMS系統(tǒng)之間建立的鏈接(對(duì)TCP/IP socket的包裝)。Connection可以產(chǎn)生一個(gè)或多個(gè)Session。跟ConnectionFactory一樣,Connection也有兩種類(lèi)型:QueueConnection和TopicConnection。
Session
Session是操作消息的接口。可以通過(guò)session創(chuàng)建生產(chǎn)者、消費(fèi)者、消息等。Session提供了事務(wù)的功能。當(dāng)需要使用session發(fā)送/接收多個(gè)消息時(shí),可以將這些發(fā)送/接收動(dòng)作放到一個(gè)事務(wù)中。同樣,也分QueueSession和TopicSession。
消息的生產(chǎn)者
消息生產(chǎn)者由Session創(chuàng)建,并用于將消息發(fā)送到Destination。同樣,消息生產(chǎn)者分兩種類(lèi)型:QueueSender和TopicPublisher。可以調(diào)用消息生產(chǎn)者的方法(send或publish方法)發(fā)送消息。
消息消費(fèi)者
消息消費(fèi)者由Session創(chuàng)建,用于接收被發(fā)送到Destination的消息。兩種類(lèi)型:QueueReceiver和TopicSubscriber。可分別通過(guò)session的createReceiver(Queue)或createSubscriber(Topic)來(lái)創(chuàng)建。當(dāng)然,也可以session的creatDurableSubscriber方法來(lái)創(chuàng)建持久化的訂閱者。
MessageListener
消息監(jiān)聽(tīng)器。如果注冊(cè)了消息監(jiān)聽(tīng)器,一旦消息到達(dá),將自動(dòng)調(diào)用監(jiān)聽(tīng)器的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內(nèi)部通信,采用的連接不是Socket連接,而是直接的方法調(diào)用,從而避免了網(wǎng)絡(luò)傳輸?shù)拈_(kāi)銷(xiāo)。應(yīng)用場(chǎng)景也僅限于Broker和客戶端在同一JVM環(huán)境下。
TCP Transport:客戶端通過(guò)TCP Socket連接到遠(yuǎn)程Broker。配置語(yǔ)法:
tcp://hostname:port?transportOptions
HTTP and HTTPS Transport:允許客戶端使用REST或者Ajax的方式進(jìn)行連接。這意味著可以直接使用Javascript向ActiveMQ發(fā)送消息。
WebSockets Transport:允許客戶端通過(guò)HTML5標(biāo)準(zhǔn)的WebSockets方式連接到Broker。
Failover Transport:青龍系統(tǒng)MQ采用的就是這種連接方式。這種方式具備自動(dòng)重新連接的機(jī)制,工作在其他Transport的上層,用于建立可靠的傳輸。允許配置任意多個(gè)的URI,該機(jī)制將會(huì)自動(dòng)選擇其中的一個(gè)URI來(lái)嘗試連接。配置語(yǔ)法:
failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportOptions
Fanout Transport:主要適用于生產(chǎn)消息發(fā)向多個(gè)代理。如果多個(gè)代理出現(xiàn)環(huán)路,可能造成消費(fèi)者接收重復(fù)的消息。所以,使用該協(xié)議時(shí),最好將消息發(fā)送給多個(gè)不相連接的代理。
Persistence持久化存儲(chǔ)
AMQ Message Store
ActiveMQ 5.0 的缺省持久化存儲(chǔ)方式。
Kaha Persistence
這是一個(gè)專(zhuān)門(mén)針對(duì)消息持久化的解決方案。它對(duì)典型的消息使用模式進(jìn)行了優(yōu)化。
JDBC Persistence
目前支持的數(shù)據(jù)庫(kù)有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。
Disable Persistence
不應(yīng)用持久化存儲(chǔ)。
集群方案(Master / Slave)
Pure Master Slave
無(wú)單點(diǎn)故障;
不需要依賴共享文件系統(tǒng)或是共享數(shù)據(jù)庫(kù),使用 KahaDB的方式持久化存儲(chǔ);
一個(gè)Master只能帶一個(gè)Slave;
Master工作期間,會(huì)將消息狀況自動(dòng)同步到Slave;
Master一旦崩潰,Slave自動(dòng)接替其工作,已發(fā)送并尚未消費(fèi)的消息繼續(xù)有效;
Slave接手后,必須停止Slave才能重啟先前的Master;
Shared File System Master Slave
JDBC Master Slave
配置上,不存在Master和Slave的區(qū)分,多個(gè)共享數(shù)據(jù)源的Broker構(gòu)成JDBC Master Slave;
首先搶到資源(數(shù)據(jù)庫(kù)鎖)的Broker成為Master,其他Broker定期嘗試搶占資源;
一旦Master崩潰,其他Broker搶占資源,最終只有一臺(tái)搶到,立刻成為Master,之前的Master即便重啟成功,也只能作為Slave等待;
安裝說(shuō)明
這里使用Docker安裝,查詢Docker鏡像:
docker search activemq
下載Docker鏡像:
docker pull webcenter/activemq
創(chuàng)建&運(yùn)行ActiveMQ容器:
docker run -d --name myactivemq -p 61617:61616 -p 8162:8161 webcenter/activemq
61616是 activemq 的容器使用端口(映射為61617),8161是 web 頁(yè)面管理端口(對(duì)外映射為8162)
查看創(chuàng)建的容器,如果存在說(shuō)明安裝成功:
docker ps
查看WEB管理頁(yè)面:
瀏覽器輸入 http://ip :8162 點(diǎn)擊Manage ActiveMQ broker使用默認(rèn)賬號(hào)/密碼:admin/admin進(jìn)入查看。
配置訪問(wèn)密碼
進(jìn)入Docker容器:
docker exec -it myactivemq /bin/bash
控制臺(tái)界面設(shè)置用戶名和密碼:
# 位于根目錄 conf 目錄下 vi jetty-realm.properties # 修改密碼 # username: password [,rolename ...] admin: admin, admin
配置連接密碼
編輯activemq.xml文件,放置到 shutdownHooks 下方即可。
<!-- 添加訪問(wèn)ActiveMQ的賬號(hào)密碼 --> <plugins> <simpleAuthenticationPlugin> <users> <authenticationUser username="${activemq.username}" password="${activemq.password}" groups="users,admins"/> </users> </simpleAuthenticationPlugin> </plugins>
修改conf中credentials.properties文件進(jìn)行密碼設(shè)置:
activemq.username=admin activemq.password=123456 guest.password=123456
注意事項(xiàng)
如果是云服務(wù)器,記得開(kāi)放相關(guān)端口(61617/8160)
感謝各位的閱讀!關(guān)于“Docker中如何搭建ActiveMQ消息服務(wù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)站題目:Docker中如何搭建ActiveMQ消息服務(wù)
分享URL:http://www.chinadenli.net/article34/gpeope.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、手機(jī)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、企業(yè)網(wǎng)站制作、靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)