ActiveMQ面試題


  1. 什么是activemq
activeMQ是一種開源的,實現了JMS1.1規范的,面向消息(MOM)的中間件,為應用程序提供高效的、可擴展的、穩定的和安全的企業級消息通信。
  1. activemq的作用以及原理
Activemq 的作用就是系統之間進行通信。 當然可以使用其他方式進行系統間通信, 如果使用 Activemq 的話可以對系統之間的調用進行解耦, 實現系統間的異步通信。 原理就是生產者生產消息, 把消息發送給activemq。 Activemq 接收到消息, 然后查看有多少個消費者, 然后把消息轉發給消費者, 此過程中生產者無需參與。 消費者接收到消息后做相應的處理和生產者沒有任何關系
  1. activemq的幾種通信方式
3.1publish( 發布 )-subscribe( 訂閱 )( 發布 - 訂閱方式 )
發布/訂閱方式用於多接收客戶端的方式.作為發布訂閱的方式,可能存在多個接收客戶端,並且接收端客戶端與發送客戶端存在時間上的依賴。一個接收端只能接收他創建以后發送客戶端發送的信息。作為subscriber ,在接收消息時有兩種方法,destination的receive方法,和實現message listener 接口的onMessage 方法

3.2 p2p(point-to-point)(點對點)

p2p的過程則理解起來比較簡單。它好比是兩個人打電話,這兩個人是獨享這一條通信鏈路的。一方發送消息,另外一方接收,就這么簡單。在實際應用中因為有多個用戶對使用p2p的鏈路
相互通信的雙方是通過一個類似於隊列的方式來進行交流。和前面pub-sub的區別在於一個topic有一個發送者和多個接收者,而在p2p里一個queue只有一個發送者和一個接收者。
  1. publish(發布)-subscribe(訂閱)方式的處理
發布訂閱模式的通信方式, 默認情況下只通知一次, 如果接收不到此消息就沒有了。 這種場景只適用於對消息送達率要求不高的情況。 如果要求消息必須送達不可以丟失的話, 需要配置持久訂閱。 每個訂閱端定義一個 id,   < property name="clientId" 在訂閱是向  activemq 注冊。 發布消息 <property name="subscriptionDurable" value="true"/>和接收消息時需要配置發送模式為持久化template.setDeliveryMode(DeliveryMode.PERSISTENT);。 此時如果客戶端接收不到消息, 消息會持久化到服務端(就是硬盤上), 直到客戶端正常接收后為止。
  1. 4.2p - p(點對點)方式的處理
 
點對點模式的話, 如果消息發送不成功此消息默認會保存到  activemq 服務端直到有消費者將其消費, 所以此時消息是不會丟失的。
 
  1. 如何解決消息重復問題
所謂消息重復,就是消費者接收到了重復的消息,一般來說我們對於這個問題的處理要把握下面幾點,
①.消息不丟失(上面已經處理了)
②.消息不重復執行
一般來說我們可以在業務段加一張表,用來存放消息是否執行成功,每次業務事物commit之后,告知服務端,已經處理過該消息,
這樣即使你消息重發了,也不會導致重復處理
大致流程如下:
        業務端的表記錄已經處理消息的id,每次一個消息進來之前先判斷該消息是否執行過,如果執行過就放棄,如果沒有執行就開始執行消息,消息執行完成之后存入這個消息的id


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM