java面試題 --- MQ

1. 什麼是 MQ,有什麼作用?

  • MQ 就是消息中間件,它的作用有異步,解耦,削峯。

2. 市場上有很多 MQ 產品,我們要如何選擇?

  • 常見的 MQ 有 ActiveMQ,它是老牌的 MQ,性能不算太好;還有 RocketMQ,是阿里巴巴開源的 MQ,性能卓越,但是社區不活躍;RabbitMQ,性能十分強悍,社區活躍,唯一的缺點就是它不是 java 語言編寫的,難以做二次開發;還有 kafka,一般用於大數據領域。我們可以根據自己的系統的併發量,以及是否要做二次開發等來確定使用哪種 MQ。

3. 你們公司用的是哪個 MQ?主要用來做什麼?

  • 我們公司用的是 ActiveMQ,主要用來處理異步通知的。

4. 簡單說一下 ActiveMQ。

  • ActiveMQ 下載安裝後,其端口是 61616,圖形界面端口是 8161,它主要有兩種工作模式,一個是點對點,一個發佈訂閱。點對點的目的地是 queue,一條消息只能有一個消費者;發佈訂閱目的地是 topic,一條消息可以有多個消費者,消費者只能消費訂閱了這個 topic 之後的消息。

5. ActiveMQ 支持哪些傳輸協議?

  • 支持 TCP,UDP,http,SSL,NIO等協議,TCP 是默認的協議,一般我們會使用 NIO協議,在 activemq.xml 中就可以修改。

6. 如何保證消息的可靠性?

  • 一個是事務,一個是簽收,還有就是持久化。生產者開啓事務,發送消息後需要 commit,消費者收到消息後需要進行簽收。持久化就是將消息寫入數據庫或者磁盤。

7. ActiveMQ 有哪些持久化方式?

  • kahadb,leveldb,jdbc 等,常用的是 jdbc 持久化。持久化的邏輯就是生產者生產了消息,先持久化,然後發送到 MQ 中,如果消費者消費成功就刪除消息,否則就繼續消費。

8. 簡述 ActiveMQ jdbc 持久化的流程。

  • 首先將 MySQL 驅動包加到 ActiveMQ 的 lib 目錄下;
  • 然後在 ActiveMQ 的配置文件中配置數據源;
  • 配置好之後 ActiveMQ 收到消息就會在數據庫生成三張表,activemq_acks 表用來存儲發佈訂閱關係,activemq_locks 是集羣時需要用到的表,activemq_msgs 就是存儲消息的表。

9. 如何解決重複消費問題?

  • 正常情況下消費者簽收了消息,消息就會從 ActiveMQ 中移除,但是可能由於網絡原因,ActiveMQ 沒收到簽收信息,就會出現重複消費問題。我們可以消費消息時往數據庫或者 Redis 寫一條記錄,消費時如果數據庫或 Redis 有這條記錄了,就不再消費。

10. 如何解決消息堆積問題?

  • 緊急擴容消費者,部署更多的消費者去消費。

11. 我需要往一個地址發通知,如果通知失敗,隔一段時間再通知,如何實現?

  • 可以用 ActicveMQ 的延時投遞。在 ActiveMQ 的配置文件中開啓對延時投遞的支持,即schedulerSupport=true,然後在生產者中設置延時投遞的相關參數即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章