RabbitMQ在國內為什么沒有那么流行?

MQ(消息隊列)的世界。MQ,就像是一個巨大的郵局,負責在不同服務或應用間傳遞消息。它可以幫助我們解耦系統,提高性能,還能做到異步處理和流量削峰。

基本使用

RabbitMQ是一個開源的消息代理和隊列服務器,可以在分布式系統中促進消息的接收、傳輸和處理。它支持多種消息協議,易于使用和部署,被廣泛應用于多個場景,比如系統解耦、負載均衡、流量削峰等。

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost"); // 設置MQ服務器地址
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();channel.queueDeclare("hello", false, false, false, null); // 創建隊列
String message = "Hello World!";
channel.basicPublish("", "hello", null, message.getBytes()); // 發送消息
System.out.println(" [x] Sent '" + message + "'");channel.close();
connection.close();

上面這段代碼就是用Java發送一個簡單消息到RabbitMQ的示例。不難吧!

最近無意間獲得一份阿里大佬寫的刷題筆記,一下子打通了我的任督二脈,進大廠原來沒那么難。

這是大佬寫的,?7701頁的BAT大佬寫的刷題筆記,讓我offer拿到手軟

性能優化

RabbitMQ的性能優化可以從多個方面入手,比如合理配置隊列、消息持久化、負載均衡、合理利用交換機和路由等。但是,相比于Kafka、RocketMQ這些,RabbitMQ在高吞吐量場景下的表現可能稍遜一籌。

開源生態

RabbitMQ有著成熟的社區和廣泛的用戶基礎。但在國內,隨著阿里巴巴的RocketMQ和Apache的Kafka的崛起,這些基于大數據背景,對高吞吐量和高可靠性有著更強需求的系統,逐漸成為主流。

使用場景

RabbitMQ擅長于低延遲、確保消息順序、復雜路由等場景。但當面對超大規模消息處理需求時,它可能就顯得力不從心了。而Kafka和RocketMQ在這方面就表現得更加出色。

真實案例比較

小到中型企業:對于不需要處理海量消息的公司,RabbitMQ是一個很好的選擇。它簡單易用,部署方便,適合快速迭代和開發。

大型企業/高吞吐量需求:這里就得說Kafka和RocketMQ了。

比如在電商、金融等行業,面對巨量數據和消息,他們的性能和可擴展性就顯得尤為重要。

RabbitMQ的特點和實際應用案例

輕量級和易于部署:對于初創公司或小型項目來說,RabbitMQ是一個非常好的選擇。舉個例子,假設有個初創電商公司,他們的訂單系統、庫存系統和用戶通知系統需要解耦合。RabbitMQ就可以在這些系統間高效地傳遞消息,而且部署和維護成本相對較低。

channel.queueDeclare("OrderQueue", true, false, false, null); // 創建一個持久化隊列
channel.basicPublish("", "OrderQueue", MessageProperties.PERSISTENT_TEXT_PLAIN, orderMessage.getBytes()); // 發送訂單消息

確保消息順序:在需要保證消息嚴格順序的系統中,RabbitMQ是一個不錯的選擇。例如,銀行的交易系統,每筆交易的順序都是至關重要的。RabbitMQ可以保證同一個隊列中消息的順序。

Kafka和RocketMQ的優勢及應用案例

高吞吐量:Kafka和RocketMQ都非常擅長處理大規模數據流。以視頻直播平臺為例,需要處理成千上萬的用戶消息和互動,Kafka能夠承擔起這種高并發、高吞吐量的需求。

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<String, String>("UserMessages", userId, message)); // 發送用戶消息

高可靠性和可擴展性:對于大型互聯網公司,比如電商平臺,在大促期間,系統需要處理巨量的訂單和交易。RocketMQ不僅可以處理高吞吐量的消息,還能保證消息的高可靠性和服務的高可用性。

DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("localhost:9876");
producer.start();
producer.send(new Message("TopicTest", "OrderTag", ("Hello RocketMQ " + orderId).getBytes(RemotingHelper.DEFAULT_CHARSET))); // 發送訂單消息

推薦一個學習 RabbitMQ 的專欄

  • 01、RabbitMQ 實戰 - RabbitMQ簡介
  • 02、RabbitMQ 實戰 - Linux安裝RabbitMQ
  • 03、RabbitMQ 實戰 - 創建RabbitMQ的Java項目
  • 04、RabbitMQ 實戰 - 使用Java實現RabbitMQ的生產者發送消息
  • 05、RabbitMQ 實戰 - 使用Java實現RabbitMQ的消費者接收消息
  • 06、RabbitMQ 實戰 - RabbitMQ模式之工作隊列(Work queues)的簡介及實現
  • 07、RabbitMQ 實戰 - RabbitMQ消息應答及消息未應答后重新入隊
  • 08、RabbitMQ 實戰 - 實現RabbitMQ隊列持久化及消息持久化
  • 09、RabbitMQ 實戰 - RabbitMQ預取值及利用預取值實現不公平分發
  • 10、RabbitMQ 實戰 - RabbitMQ發布確認模式的概念及實現
  • 11、RabbitMQ 實戰 - RabbitMQ交換機(Exchange)簡介
  • 12、RabbitMQ 實戰 - Fanout交換機的簡介與實現
  • 13、RabbitMQ 實戰 - Direct交換機的簡介與實現
  • 14、RabbitMQ 實戰 - Topics交換機的簡介與實現
  • 15、RabbitMQ 實戰 - 死信隊列的簡介與死信隊列和死信消費者的實現
  • 16、RabbitMQ 實戰 - 用SpringBoot整合RabbitMQ
  • 17、RabbitMQ 實戰 - 延遲隊列的簡介與實現
  • 18、RabbitMQ 實戰 - RabbitMQ基于插件實現延遲隊列
  • 19、RabbitMQ 實戰 - 實現在RabbitMQ宕機的情況下對消息進行處理
  • 20、RabbitMQ 實戰 - RabbitMQ備份交換機
  • 21、RabbitMQ 實戰 - RabbitMQ冪等性
  • 22、RabbitMQ 實戰 - RabbitMQ優先級隊列
  • 23、RabbitMQ 實戰 - RabbitMQ惰性隊列
  • 24、RabbitMQ 實戰 - RabbitMQ集群搭建
  • 25、RabbitMQ 實戰 - RabbitMQ搭建鏡像隊列
  • 26、RabbitMQ 實戰 - RabbitMQ實現高可用負載均衡
  • 27、RabbitMQ 實戰 - RabbitMQ使用解決異地訪問延遲問題
  • 28、RabbitMQ 實戰 - RabbitMQ使用解決異地訪問延遲問題
  • 29、RabbitMQ 實戰 - RabbitMQ搭建Shovel

RabbitMQ在輕量級、易于部署、消息順序保證方面表現優秀,但在面對大規模數據處理的場景時,可能就不太適用。而Kafka和RocketMQ在高吞吐量、高可靠性方面更有優勢。

結論

RabbitMQ在國內之所以不如Kafka或RocketMQ流行,主要是因為隨著互聯網企業對數據處理能力的需求日益增長,更適合高吞吐量、高可靠性場景的Kafka和RocketMQ逐漸成為首選。而RabbitMQ雖然在某些場景下表現優秀,但在這波“大數據潮流”中顯得略顯不足。

最后,技術的選擇永遠都是多方面權衡的結果。每種技術都有它的優勢和最適合的應用場景,關鍵在于找到最適合你當前業務需求的那一款。嘿,說不定哪天RabbitMQ又會因為某些獨特的優勢重新火起來呢!

最后說一句(求關注,求贊,別白嫖我)

最近無意間獲得一份阿里大佬寫的刷題筆記,一下子打通了我的任督二脈,進大廠原來沒那么難。

這是大佬寫的, 7701頁的BAT大佬寫的刷題筆記,讓我offer拿到手軟

項目文檔&視頻:

項目文檔 & 視頻

本文,已收錄于,我的技術網站 ddkk.com,有大廠完整面經,工作技術,架構師成長之路,等經驗分享

求一鍵三連:點贊、分享、收藏

點贊對我真的非常重要!在線求贊,加個關注我會非常感激

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211693.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211693.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211693.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spring boot + uniapp 微信公眾號 jsapi 支付

后端支付類 package com.ruoyi.coupon.payment;import com.google.gson.Gson; import com.ruoyi.coupon.payment.dto.PayParamJsapiDto; import com.ruoyi.coupon.payment.dto.RefundParam; import com.ruoyi.coupon.service.ICouponConfigService; import com.wechat.pay.jav…

FFmpeg抽取視頻h264數據重定向

根據視頻重定向技術解析中的 截獲解碼視頻流的思路&#xff0c;首先需要解決如何輸出視頻碼流的問題。 目前只針對h264碼流進行獲取&#xff0c;步驟如下&#xff1a; 打開mp4文件并創建一個空文件用于存儲H264數據 提取一路視頻流資源 循環讀取流中所有的包(AVPacket),為…

redis中使用pipeline批量處理請求提升系統性能

在操作數據庫時&#xff0c;為了加快程序的執行速度&#xff0c;在新增或更新數據時&#xff0c;可以通過批量提交的方式來減少應用和數據庫間的傳輸次數&#xff1b;在redis中也有這樣的技術實現批量處理&#xff0c;也就是管道——Pipeline。它也是通過批量提交數據的方式來實…

線程安全3--wait和notify

文章目錄 wait and notify&#xff08;等待通知機制notify補充 wait and notify&#xff08;等待通知機制 引入wait notify就是為了能夠從應用層面上&#xff0c;干預到多個不同線程代碼的執行順序&#xff0c;這里說的干預&#xff0c;不是影響系統的線程調度策略&#xff08…

uni-app應用設置 可以根據手機屏幕旋轉進行 (橫/豎) 屏切換

首先 我們打開項目的 manifest.json 在左側導航欄中找到 源碼視圖 然后找到 app-plus 配置 在下面加上 "orientation": [//豎屏正方向"portrait-primary",//豎屏反方向"portrait-secondary",//橫屏正方向"landscape-primary",//橫屏…

第57天:django學習(六)

模版之過濾器 語法&#xff1a; {{obj|filter__name:param}} 變量名字|過濾器名稱&#xff1a;變量 default 如果一個變量是false或者為空&#xff0c;使用給定的默認值。否則&#xff0c;使用變量的值。例如&#xff1a; {{ value|default:"nothing"}} length …

IDEA啟動應用時報錯:錯誤: 找不到或無法加載主類 @C:\Users\xxx\AppData\Local\Temp\idea_arg_filexxx

IDEA啟動應用時報錯&#xff0c;詳細錯誤消息如下&#xff1a; C:\devel\jdk1.8.0_201\bin\java.exe -agentlib:jdwptransportdt_socket,address127.0.0.1:65267,suspendy,servern -XX:TieredStopAtLevel1 -noverify -Dspring.output.ansi.enabledalways -Dcom.sun.management…

基于以太坊的智能合約開發Solidity(事件日志篇)

//聲明版本號&#xff08;程序中的版本號要和編譯器版本號一致&#xff09; pragma solidity ^0.5.17; //合約 contract EventTest {//狀態變量uint public Variable;//構造函數constructor() public{Variable 100;}event ValueChanged(uint newValue); //事件聲明event Log(…

ElasticSearch之cat plugins API

命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/plugins?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下&#xff1a; name component version…

class064 Dijkstra算法、分層圖最短路【算法】

class064 Dijkstra算法、分層圖最短路【算法】 算法講解064【必備】Dijkstra算法、分層圖最短路 code1 743. 網絡延遲時間 // Dijkstra算法模版&#xff08;Leetcode&#xff09; // 網絡延遲時間 // 有 n 個網絡節點&#xff0c;標記為 1 到 n // 給你一個列表 times&…

法律服務網站建設效果如何

律師事務所及法律知識咨詢機構等往往是眾多人群需求的服務&#xff0c;服務多樣化及內容多元化&#xff0c;市場中也有大量品牌&#xff0c;在實際消費服務中大多以本地事務所為主&#xff0c;而線上咨詢服務則一般沒有區域限制&#xff0c;同行增多及人們知識獲取渠道增加&…

C++-引用和指針區別

文章目錄 1.變量的組成2.指針2.1 定義2.2 使用指針操作變量2.3 為什么使用指針 3.引用3.1 定義3.2 引用注意事項 4.引用和指針的區別 1.變量的組成 變量的組成&#xff1a;變量地址&#xff0c;變量名&#xff0c;變量值 例&#xff1a; int i 12;2.指針 2.1 定義 指針用于存…

如何為游戲角色3D模型設置紋理貼圖

在線工具推薦&#xff1a; 3D數字孿生場景編輯器 - GLTF/GLB材質紋理編輯器 - 3D模型在線轉換 - Three.js AI自動紋理開發包 - YOLO 虛幻合成數據生成器 - 三維模型預覽圖生成器 - 3D模型語義搜索引擎 當談到游戲角色的3D模型風格時&#xff0c;有幾種不同的風格&#xf…

Mybatis中的查詢操作

單表查詢 單表查詢在《初始Mybatis》中已經介紹過&#xff0c;這里就不在介紹了。咱們這里只說單表查詢中的“like查詢”。like查詢單獨使用#{}報錯 <select id"selectByKeyword" resultType"com.example.demo.entity.Userinfo">select * from use…

計網Lesson8 - NAT技術與鏈路層概述

文章目錄 NAT 技術1. 因特網的接入方式2. 公網和私網3. NAT 技術 鏈路層1. 數據鏈路層概述2. 數據鏈路層的三個問題2.1 封裝成幀2.2 透明傳輸2.3 差錯檢測 NAT 技術 1. 因特網的接入方式 光貓將電信號轉換為數字信號發送給路由器 光纖入戶 光纖傳遞的就是數字信號&#xff0c…

python+pytest接口自動化(12)-自動化用例編寫思路 (使用pytest編寫一個測試腳本)

經過之前的學習鋪墊&#xff0c;我們嘗試著利用pytest框架編寫一條接口自動化測試用例&#xff0c;來厘清接口自動化用例編寫的思路。 我們在百度搜索天氣查詢&#xff0c;會出現如下圖所示結果&#xff1a; 接下來&#xff0c;我們以該天氣查詢接口為例&#xff0c;編寫接口測…

錯題總結(三)

1.寫代碼將三個整數數按從大到小輸出。 例如&#xff1a; 輸入&#xff1a;2 3 1 輸出&#xff1a;3 2 1 int main() {int a 0;int b 0;int c 0;int tep 0;scanf("%d%d%d", &a, &b, &c);if (a < b){tep a;a b;b tep;}if (b < c){tep b…

每日一練2023.12.9—— 矩陣A乘以B【PTA】

題目鏈接&#xff1a;L1-048 矩陣A乘以B 題目要求&#xff1a; 給定兩個矩陣A和B&#xff0c;要求你計算它們的乘積矩陣AB。需要注意的是&#xff0c;只有規模匹配的矩陣才可以相乘。即若A有Ra?行、Ca?列&#xff0c;B有Rb?行、Cb?列&#xff0c;則只有Ca?與Rb?相等時&a…

Linux Shell 基礎命令

Linux 是一個開源的操作系統&#xff0c;其命令行界面是它的重要組成部分。在這個界面下&#xff0c;Shell 是一個能夠與操作系統進行交互的工具。Shell 是一種程序&#xff0c;它能夠接收用戶輸入的命令&#xff0c;并將這些命令發送到操作系統中進行處理。 在 Linux 中&…

Docker實戰筆記 三 Docker私有庫

1.拉取私有庫image rootcenots-7.5:/root#docker pull registry Using default tag: latest latest: Pulling from library/registry c926b61bad3b: Pull complete 5501dced60f8: Pull complete e875fe5e6b9c: Pull complete 21f4bf2f86f9: Pull complete 98513cca25bb: P…