java面試題 --- MQ

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

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

2. 市場(chǎng)上有很多 MQ 產(chǎn)品,我們要如何選擇?

  • 常見的 MQ 有 ActiveMQ,它是老牌的 MQ,性能不算太好;還有 RocketMQ,是阿里巴巴開源的 MQ,性能卓越,但是社區(qū)不活躍;RabbitMQ,性能十分強(qiáng)悍,社區(qū)活躍,唯一的缺點(diǎn)就是它不是 java 語言編寫的,難以做二次開發(fā);還有 kafka,一般用于大數(shù)據(jù)領(lǐng)域。我們可以根據(jù)自己的系統(tǒng)的并發(fā)量,以及是否要做二次開發(fā)等來確定使用哪種 MQ。

3. 你們公司用的是哪個(gè) MQ?主要用來做什么?

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

4. 簡單說一下 ActiveMQ。

  • ActiveMQ 下載安裝后,其端口是 61616,圖形界面端口是 8161,它主要有兩種工作模式,一個(gè)是點(diǎn)對(duì)點(diǎn),一個(gè)發(fā)布訂閱。點(diǎn)對(duì)點(diǎn)的目的地是 queue,一條消息只能有一個(gè)消費(fèi)者;發(fā)布訂閱目的地是 topic,一條消息可以有多個(gè)消費(fèi)者,消費(fèi)者只能消費(fèi)訂閱了這個(gè) topic 之后的消息。

5. ActiveMQ 支持哪些傳輸協(xié)議?

  • 支持 TCP,UDP,http,SSL,NIO等協(xié)議,TCP 是默認(rèn)的協(xié)議,一般我們會(huì)使用 NIO協(xié)議,在 activemq.xml 中就可以修改。

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

  • 一個(gè)是事務(wù),一個(gè)是簽收,還有就是持久化。生產(chǎn)者開啟事務(wù),發(fā)送消息后需要 commit,消費(fèi)者收到消息后需要進(jìn)行簽收。持久化就是將消息寫入數(shù)據(jù)庫或者磁盤。

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

  • kahadb,leveldb,jdbc 等,常用的是 jdbc 持久化。持久化的邏輯就是生產(chǎn)者生產(chǎn)了消息,先持久化,然后發(fā)送到 MQ 中,如果消費(fèi)者消費(fèi)成功就刪除消息,否則就繼續(xù)消費(fèi)。

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

  • 首先將 MySQL 驅(qū)動(dòng)包加到 ActiveMQ 的 lib 目錄下;
  • 然后在 ActiveMQ 的配置文件中配置數(shù)據(jù)源;
  • 配置好之后 ActiveMQ 收到消息就會(huì)在數(shù)據(jù)庫生成三張表,activemq_acks 表用來存儲(chǔ)發(fā)布訂閱關(guān)系,activemq_locks 是集群時(shí)需要用到的表,activemq_msgs 就是存儲(chǔ)消息的表。

9. 如何解決重復(fù)消費(fèi)問題?

  • 正常情況下消費(fèi)者簽收了消息,消息就會(huì)從 ActiveMQ 中移除,但是可能由于網(wǎng)絡(luò)原因,ActiveMQ 沒收到簽收信息,就會(huì)出現(xiàn)重復(fù)消費(fèi)問題。我們可以消費(fèi)消息時(shí)往數(shù)據(jù)庫或者 Redis 寫一條記錄,消費(fèi)時(shí)如果數(shù)據(jù)庫或 Redis 有這條記錄了,就不再消費(fèi)。

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

  • 緊急擴(kuò)容消費(fèi)者,部署更多的消費(fèi)者去消費(fèi)。

11. 我需要往一個(gè)地址發(fā)通知,如果通知失敗,隔一段時(shí)間再通知,如何實(shí)現(xiàn)?

  • 可以用 ActicveMQ 的延時(shí)投遞。在 ActiveMQ 的配置文件中開啟對(duì)延時(shí)投遞的支持,即schedulerSupport=true,然后在生產(chǎn)者中設(shè)置延時(shí)投遞的相關(guān)參數(shù)即可。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容