日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RabbitMq常见问题

發布時間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RabbitMq常见问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RabbitMq常見問題


目錄

  • 什么是RabbitMQ?

  • 為什么要使用RabbitMQ?

  • 消息隊列的優缺點?

  • rabbitmq 的使用場景有哪些?

  • rabbitmq 有哪些重要的角色?

  • rabbitmq 有哪些重要的組件?

  • rabbitmq 中 vhost 的作用是什么?

  • rabbitmq 的消息是怎么發送的?

  • rabbitmq 怎么保證消息的穩定性?

  • rabbitmq 怎么避免消息丟失?

  • 要保證消息持久化成功的條件有哪些?

  • rabbitmq 持久化有什么缺點?

  • rabbitmq 有幾種廣播類型?

  • rabbitmq 怎么實現延遲消息隊列?

  • rabbitmq 集群有什么用?

  • rabbitmq 節點的類型有哪些?

  • rabbitmq 集群搭建需要注意哪些問題?

  • rabbitmq 每個節點是其他節點的完整拷貝嗎?為什么?

  • rabbitmq 集群中唯一一個磁盤節點崩潰了會發生什么情況?

  • rabbitmq 對集群節點停止順序有要求嗎?

  • Kafka 與 RabbitMQ 的區別?


  • 1. 什么是RabbitMQ?

    RabbitMQ 即一個消息隊列,主要是用來實現應用程序的異步和解耦,同時也能起到消息緩沖,消息分發的作用。RabbitMQ使用的是AMQP協議,它是一種二進制協議。

    AMQP,即Advanced Message Queuing Protocol,一個提供統一消息服務的應用層標準高級消息隊列協議,是應用層協議的一個開放標準,為面向消息的中間件設計。基于此協議的客戶端與消息中間件可傳遞消息,并不受客戶端/中間件不同產品,不同的開發語言等條件的限制。Erlang中的實現有 RabbitMQ等。


    2. 為什么要使用RabbitMQ?

    要結合具體應用場景去分析,知道不同消息隊列的區別。

    具體文章見:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么優缺點:https://blog.csdn.net/weixin_41910694/article/details/97375307


    3. 消息隊列的優缺點?

    還是參考下面文章。

    具體文章見:Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么優缺點:https://blog.csdn.net/weixin_41910694/article/details/97375307


    4. rabbitmq 的使用場景有哪些?

    • 搶購活動,削峰填谷,防止系統崩潰。
    • 延遲信息處理,比如10分鐘之后給下單未付款的用戶發送郵件提醒。
    • 解耦系統,對于新增的功能可以單獨寫模塊擴展,比如用戶確認評價之后,新增了給用戶返積分的功能,這個時候不用在業務代碼里添加新增積分的功能,只需要把新增積分的接口訂閱確認評價的消息隊列即可,后面再添加任何功能只需要訂閱對應的消息隊列即可。

    5. rabbitmq 有哪些重要的角色?

    RabbitMq 中重要的角色有:生產者,消費者和代理

    • 生產者:消費的創建者,負責創建和推送數據到消息服務器;
    • 消費者:消息的接收方,用于處理數據和確認消息;
    • 代理:就是 RabbitMq 本身,用于扮演“快遞”的角色,本身不生成消息,只是扮演“快遞”的角色。

    6. rabbitmq 有哪些重要的組件?

    • ConnectionFactory(連接管理器):應用程序與Rabbit之間建立連接的管理器,程序代碼中使用。
    • Channel(信道):消息推送使用的通道。
    • Exchange(交換器):用于接受,分配消息。
    • Queue(隊列):用于存儲生產者的消息。
    • RoutingKey(路由鍵):用于把生產者的數據分配到交換器上。
    • BindingKey(綁定鍵):用于把交換器的消息綁定到隊列上。

    7. rabbitmq 中 vhost 的作用是什么?

    vhost:每個RabbitMq都能創建多個vhost,我們稱之為虛擬主機,每個虛擬主機其實都是mini版的RabbitMq,它擁有自己的隊列,交換器和綁定,擁有自己的權限機制。


    8. rabbitmq 的消息是怎么發送的?

    首先客戶端必須連接到RabbitMq服務器才能發布和消費消息,客戶端和 rabbit server 之間會創建一個tcp連接,一旦tcp打開并通過了認證(認證就是你發送給rabbit服務器的用戶名和密碼),你的客戶端和 RabbitMq 就創建一條 amqp 信道(channel),信道是創建在“真實”tcp上的虛擬連接,amqp命令都是通過信道發送出去的,每個信道都會有唯一的id,不論是發布消息,訂閱隊列都是通過這個信道完成的。


    9. rabbitmq 怎么保證消息的穩定性?

    • 提供了事務的功能。
    • 通過將channel設置為confirm(確認)模式。

    10. rabbitmq 怎么避免消息丟失?

    • 把消息持久化磁盤,保證服務器重啟消息不丟失。
    • 每個集群至少有一個物理磁盤,保證消息落入磁盤。

    11. 要保證消息持久化成功的條件有哪些?

    • 聲明隊列必須設置持久化 durable 設置為 true。
    • 消息推送投遞模式必須設置持久化, deliveryMode設置為2(持久)。
    • 消息已經到達持久化交換器
    • 消息已經到達持久化隊列。

    12. rabbitmq 持久化有什么缺點?

    持久化的缺點就是降低了服務器的吞吐量,因為使用的是磁盤而非內存存儲,從而降低了吞吐量。可盡量使用ssd硬盤來緩解吞吐量的問題。


    13. rabbitmq 有幾種廣播類型?

    • direct(默認方式):最基礎最簡單的模式,發送方把消息發送給訂閱方,如果有多個訂閱者,默認采用輪詢的方式進行消息發送。
    • headers:與direct類似,只是性能很差,次類型幾乎用不到。
    • fanout:分發模式,把消費分發給所有訂閱者。
    • topic:匹配訂閱模式,使用正則匹配到消息隊列,能匹配到的都能接收到。

    14. rabbitmq 怎么實現延遲消息隊列?

    延遲隊列的實現有兩種方式:

    • 通過消息過期后進入死信交換器,再由交換器轉發到延遲消費隊列,實現延遲功能。
    • 使用 RabbitMq-delayed-message-exchange 插件實現延遲功能。

    15. rabbitmq 集群有什么用?

    集群主要有以下兩個用途:

    • 高可用:某個服務器出現問題,整個RabbitMq還可以繼續使用。
    • 高容量:集群可以承載更多的消息量。

    16. rabbitmq 節點的類型有哪些?

    • 磁盤節點:消息會存儲到磁盤。
    • 內存節點:消息都存儲到內存中,重啟服務器消息丟失,性能高于磁盤類型。

    17. rabbitmq 集群搭建需要注意哪些問題?

    • 各節點之間使用“-link”連接,此屬性不能忽略。
    • 各節點使用的 erlang cookie 值必須相同,此值相當于“秘鑰”的功能,用于各節點的認證。
    • 整個集群必須包含一個磁盤節點。

    18. rabbitmq 每個節點是其他節點的完整拷貝嗎?為什么?

    不是,原因有以下兩個:

    • 存儲空間的考慮:如果每個節點都擁有所有隊列的完全拷貝,這樣新增節點不但沒有新增存儲空間,反而增加了更多的冗余數據。
    • 性能的考慮:如果每條消息都需要完整拷貝每一個集群節點,那新增節點并沒有提升處理消息的能力,最多是保持和單節點相同的性能甚至更糟。

    19. rabbitmq 集群中唯一一個磁盤節點崩潰了會發生什么情況?

    如果唯一磁盤的磁盤節點崩潰,不能進行一下操作:

    • 不能創建隊列
    • 不能創建交換器
    • 不能創建綁定
    • 不能添加用戶
    • 不能更改權限
    • 不能添加和刪除集群節點

    唯一磁盤節點崩潰了,集群是可以保持運行的,但你不能更改任何東西。


    20. rabbitmq 對集群節點停止順序有要求嗎?

    RabbitMq 對集群的停止的順序是有要求的,應該先關閉內存節點,最后關閉磁盤節點。如果順序恰好相反的話,可能造成消息的丟失。


    21. rabbitmq 和 kafka的區別?

  • 應用場景方面
    RabbitMQ:用于實時的,對可靠性要求較高的消息傳遞上。
    kafka:用于處于活躍的流式數據,大數據量的數據處理上。
  • 架構模型方面
    producer,broker,consumer
    RabbitMQ:以broker為中心,有消息的確認機制
    kafka:以consumer為中心,無消息的確認機制
  • 吞吐量方面
    RabbitMQ:支持消息的可靠的傳遞,支持事務,不支持批量操作,基于存儲的可靠性的要求存儲可以采用內存或硬盤,吞吐量小。
    kafka:內部采用消息的批量處理,數據的存儲和獲取是本地磁盤順序批量操作,消息處理的效率高,吞吐量高。
  • 集群負載均衡方面
    RabbitMQ:本身不支持負載均衡,需要loadbalancer的支持
    kafka:采用zookeeper對集群中的broker,consumer進行管理,可以注冊topic到zookeeper上,通過zookeeper的協調機制,producer保存對應的topic的broker信息,可以隨機或者輪詢發送到broker上,producer可以基于語義指定分片,消息發送到broker的某個分片上。
    kafka通過zk和分區機制實現:zk記錄broker信息,生產者可以獲取到并通過策略完成負載均衡;通過分區,投遞消息到不同分區,消費者通過服務組完成均衡消費。
  • 消息中間件選型分析——從Kafka與RabbitMQ的對比來看全局:https://blog.csdn.net/u013256816/article/details/79838428

    總結

    以上是生活随笔為你收集整理的RabbitMq常见问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。