RabbitMQ詳細介紹及面試高頻問題

2021-10-08 13:37:45 字數 1328 閱讀 9177

amqp和jms兩者間的區別和聯絡:

常見mq產品 :

在上圖的模型中,有以下概念:

當訊息處理比較耗時的時候,可能生產訊息的速度會遠遠大於訊息的消費速度。長此以往,訊息就會堆積越來越多,無法及時處理。此時就可以使用work 模型:讓多個消費者繫結到乙個佇列,共同消費佇列中的訊息。佇列中的訊息一旦消費,就會消失,因此任務是不會被重複執行的

能者多勞: 處理訊息快的多,多消費訊息,在**中設定basicqos(1),每個消費者只能消費一條

exchange(交換機)只負責**訊息,不具備儲存訊息的能力,因此如果沒有任何佇列與exchange繫結,或者沒有符合路由規則的佇列,那麼訊息會丟失!

在廣播模式下,訊息傳送流程是這樣的:

在fanout模式中,一條訊息,會被所有訂閱的佇列都消費。但是,在某些場景下,我們希望不同的訊息被不同的佇列消費。這時就要用到direct型別的exchange。

在direct模型下:

topic型別的exchange與direct相比,都是可以根據routingkey把訊息路由到不同的佇列。只不過topic型別exchange可以讓佇列在繫結routing key 的時候使用萬用字元!

routingkey 一般都是有乙個或多個單詞組成,多個單詞之間以」.」分割,例如: item.insert

萬用字元規則:

#:匹配乙個或多個詞

*:匹配不多不少恰好1個詞

舉例:audit.#:能夠匹配audit.irs.corporate 或者 audit.irs

audit.*:只能匹配audit.irs

解釋:面試題1:如何解決訊息丟失?面試題2:如何避免訊息堆積

面試題3:如何保證訊息的有序性?

答:大部分業務對訊息的有序性要求不高,如果遇到對有序要求較高的業務,分兩種情況來處理:

業務同時對併發要求較高:

面試題4:如何避免訊息重複消費?

RabbitMQ中Queue詳細介紹

新建queue時有很多引數,都代表什麼含義,在這裡解釋一下 前述 rabbit版本為3.7.6 erlang 版本為 21.0.1 必填項,佇列的名字,建議格式可以為多個字段,表示佇列中存放的內容,比如task.queue 是否需要持久化,有兩個選項durable 長久的 和transient 臨時...

RabbitMq詳細入門學習介紹二

相信你如果看過rabbitmq詳細入門學習介紹一的5種訊息佇列模式是不是有點煩鎖複雜。那麼在這裡,幸運的是,spring提供了對rabbitmq的封裝,將複雜的關係設定整合到配置檔案中。依賴於兩個元件,抽象層spring amqp和實現層spring rabbit。於是 簡化為 生產者 消費者 pu...

RabbitMQ使用介紹及例項

訊息列隊不做過多解釋了,直接講講rabbitmq的基本概念和路由模式。一 安裝及基本概念 connectionfactory connection channel不做過多介紹,基本步驟為 1.初始化連線工廠 2.從連線工廠獲取連線 3.在連線中開啟乙個通道 4.在通道中宣告交換機 5.在通道中宣告乙...