技術(shù)干貨:ActiveMQ面試題及答案_第1頁
技術(shù)干貨:ActiveMQ面試題及答案_第2頁
技術(shù)干貨:ActiveMQ面試題及答案_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

技術(shù)干貨:ActiveMQ面試題及答案

1、什么是ActiveMQ?

activeMQ是一種開源的,實現(xiàn)了JMS1.1規(guī)范的,面對消息(MOM)的中間件,為應(yīng)用程序供應(yīng)高效的、可擴展的、穩(wěn)定的和平安的企業(yè)級消息通信。

2、Activemq的瓶頸值

依據(jù)網(wǎng)上一般評測文檔上來看,每秒的消息吞吐在2000以上,acticemq也可以集群化部署,也是使用zookeeper來搭建。

3、ActiveMQ服務(wù)器宕機怎么辦?

這得從ActiveMQ的儲存機制說起。在通常的狀況下,非長久化消息是存儲在內(nèi)存中的,長久化消息是存儲在文件中的,它們的最大限制在配置文件的systemUsage節(jié)點中配置。

但是,在非長久化消息積累到肯定程度,內(nèi)存告急的時候,ActiveMQ會將內(nèi)存中的非長久化消息寫入臨時文件中,以騰出內(nèi)存。雖然都保存到了文件里,但它和長久化消息的區(qū)分是,重啟后長久化消息會從文件中恢復(fù),非長久化的臨時文件會直接刪除。

那假如文件增大到達了配置中的最大限制的時候會發(fā)生什么?我做了以下試驗:

設(shè)置2G左右的長久化文件限制,大量生產(chǎn)長久化消息直到文件達到最大限制,此時生產(chǎn)者堵塞,但消費者可正常連接并消費消息,等消息消費掉一部分,文件刪除又騰出空間之后,生產(chǎn)者又可連續(xù)發(fā)送消息,服務(wù)自動恢復(fù)正常。

設(shè)置2G左右的臨時文件限制,大量生產(chǎn)非長久化消息并寫入臨時文件,在達到最大限制時,生產(chǎn)者堵塞,消費者可正常連接但不能消費消息,或者原本慢速消費的消費者,消費突然停止。整個系統(tǒng)可連接,但是無法供應(yīng)服務(wù),就這樣掛了。

詳細緣由不詳,解決方案:盡量不要用非長久化消息,非要用的話,將臨時文件限制盡可能的調(diào)大。

4、AcitveMQ的作用、原理?(生產(chǎn)者、消費者。p2p、訂閱實現(xiàn)流程)

Activemq的作用就是系統(tǒng)之間進行通信。當然可以使用其他方式進行系統(tǒng)間通信,假如使用Activemq的話可以對系統(tǒng)之間的調(diào)用進行解耦,實現(xiàn)系統(tǒng)間的異步通信。原理就是生產(chǎn)者生產(chǎn)消息,把消息發(fā)送給activemq。Activemq接收到消息,然后查看有多少個消費者,然后把消息轉(zhuǎn)發(fā)給消費者,此過程中生產(chǎn)者無需參加。消費者接收到消息后做相應(yīng)的處理和生產(chǎn)者沒有任何關(guān)系

5、activemq在項目中如何應(yīng)用的

Activemq在項目中主要是完成系統(tǒng)之間通信,并且將系統(tǒng)之間的調(diào)用進行解耦。例如在添加、修改商品信息后,需要將商品信息同步到索引庫、同步緩存中的數(shù)據(jù)以及生成靜態(tài)頁面一系列操作。

在此場景下就可以使用activemq。一旦后臺對商品信息進行修改后,就向activemq發(fā)送一條消息,然后通過activemq將消息發(fā)送給消息的消費端,消費端接收到消息可以進行相應(yīng)的業(yè)務(wù)處理

7、rabbitmq如何實現(xiàn)集群高可用?

集群是保證服務(wù)牢靠性的一種方式,同時可以通過水平擴展以提升消息吞吐力量。RabbitMQ是用分布式程序設(shè)計語言erlang開發(fā)的,所以天生就支持集群。接下來,將介紹RabbitMQ分布式消息處理方式、集群模式、節(jié)點類型,并動手搭建一個高可用集群環(huán)境,最終通過java程序來驗證集群的高可用性。

RabbitMQ分布式的消息處理方式有以下三種:

(1)Clustering:不支持跨網(wǎng)段,各節(jié)點需運行同版本的Erlang和RabbitMQ,應(yīng)用于同網(wǎng)段局域網(wǎng)。

(2)Federation:允許單臺服務(wù)器上的Exchange或Queue接收發(fā)布到另一臺服務(wù)器上Exchange或Queue的消息,應(yīng)用于廣域網(wǎng)。

(3)Shovel:與Federation類似,但工作在更低層次。

RabbitMQ對網(wǎng)絡(luò)延遲很敏感,在LAN環(huán)境建議使用clustering方式;在WAN環(huán)境中,則使用Federation或Shovel。我們平常說的RabbitMQ集群,說的就是clustering方式,它是RabbitMQ內(nèi)嵌的一種消息處理方式,而Federation或Shovel則是以plugin形式存在。

8、丟消息怎么辦?

這得從java的.SocketException特別說起。簡潔點說就是當網(wǎng)絡(luò)發(fā)送方發(fā)送一堆數(shù)據(jù),然后調(diào)用close關(guān)閉連接之后。這些發(fā)送的數(shù)據(jù)都在接收者的緩存里,接收者假如調(diào)用read方法照舊能從緩存中讀取這些數(shù)據(jù),盡管對方已經(jīng)關(guān)閉了連接。

但是當接收者嘗試發(fā)送數(shù)據(jù)時,由于此時連接已關(guān)閉,所以會發(fā)生特別,這個很好理解。不過需要留意的是,當發(fā)生SocketException后,原本緩存區(qū)中數(shù)據(jù)也作廢了,此時接收者再次調(diào)用read方法去讀取緩存中的數(shù)據(jù),就會報Softwarecausedconnectionabort:recvfailed錯誤。

通過抓包得知,ActiveMQ會每隔10秒發(fā)送一個心跳包,這個心跳包是服務(wù)器發(fā)送給客戶端的,用來推斷客戶端死沒死。假如你看過上面第一條,就會知道非長久化消息積累到肯定程度會寫到文件里,這個寫的過程會堵塞全部動作,而且會持續(xù)20到30秒,并且隨著內(nèi)存的增大而增大。

當客戶端發(fā)完消息調(diào)用connection.close()時,會期盼服務(wù)器對于關(guān)閉連接的回答,假如超過15秒沒回答就直接調(diào)用socket層的close關(guān)閉tcp連接了。這時客戶端發(fā)出的消息其實還在服務(wù)器的緩存里等待處理,不過由于服務(wù)器心跳包的設(shè)置,導(dǎo)致發(fā)生了.Socket

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論