初识消息队列/RabbitMQ详解
歡迎大家閱讀《朝夕Net社區技術專刊》
我們致力于.NetCore的推廣和落地,為更好的幫助大家學習,方便分享干貨,特創此刊!很高興你能成為忠實讀者,文末福利不要錯過哦!
今天來給大家分享關于消息隊列的內容;作為一個軟件技術開發者,聽到消息隊列這幾個字,就有種很高端的感覺;因為現在只要是稍大的平臺都要考慮大數據高并發的問題、集群的問題、負載均衡的問題;那么消息隊列在解決這類問題上占著舉足輕重的地位;比方說小伙伴們常常使用的火車篇購票軟件12306就使用到了消息隊列;所以消息隊列的學習和掌握是作為一個高級開發這必備的技能了。
01
PART
什么是消息隊列
圖1:消息隊列
圖1就是一個消息隊列的使用結構圖,比方說買票系統需要生成訂單,不是直接就去調用訂單系統,而是通過消息隊列,把生成訂單的數據,寫入消息隊列中去,然后訂單系統就可以到消息隊列中去訂閱獲取數據,再生成訂單;消息隊列有個特點,先進先出,先存進去的就先被取出來,取出來以后,數據在隊列中被刪除,消息數據在消息隊列中是持久化存儲的;只要是沒有被取出,就會一直存儲在消息隊列中
如上圖,就把買票系統和生成訂單系統做了解耦;即時是生成訂單系統發生故障了,并不影響買票系統,依然可以把消息先寫入消息隊列;等生成訂單系統正常了,再繼續去生成訂單;這里也會涉及到三個名詞---生產者/消費者/隊列;寫入消息到隊列的被稱為生產者,在消息隊列中取出數據的被稱為消費者;
在大數據高并發的情況下,服務器壓力變大,如果使用消息隊列,可以讓生產者服務器做集群,消費者服務器也做集群;如圖2。
圖2
如果生產者服務器不能滿足需求了,可以來多態服務器,來同時處理,寫入消息到消息隊列,消費者服務器如果處理能力不夠,也可以增加多個消費者服務器,來同時消費消息隊列里的數據;從而大大的提高系統的處理能力。
消息隊列不僅可以實現一方寫入,一方取出,也可以是一方既可以寫入,也可以取出;既做生產者,也做消費者;如圖3
圖3
怎么樣,如上圖,就可以做一個多個客戶端之間的即時通信了!
經過以上介紹,我們了解了什么是消息隊列在我們技術開發中的應用,消息隊列能給我們帶來什么。他其實就是一個第三方的一個隊列;讓要做的事情能夠排隊進行;讓多個進程協作完整業務處理;當然了,消息隊列也是一個獨立的進程;現在業界已經有很多已經成型的消息隊列引擎;下面就給大家列舉一些。
u? ZeroMQ
u? 推特的Distributedlog
u? ActiveMQ:Apache旗下的老牌消息引擎
u? RabbitMQ、Kafka:AMQP的默認實現。
u? RocketMQ
u? Artemis:Apache的ActiveMQ下的子項目
u? Apollo:同樣為Apache的ActiveMQ的子項目的號稱下一代消息引擎
以上這些消息隊列引擎,都已經比較成型,其中RabbitMQ支持的功能非常豐富,RabbitMQ支持集群化,高可用部署架構,支持消息高可靠;支持多種編程語言;現在的技術開發都追求支持高可用,集群,可靠性;所以,學習RabbitMQ是我們的首選;這里我就準備把RabbitMQ給同學們做以介紹,從RabbitMQ的環境準備、環境部署;使用RabbitMQ做一個開發Demo;包括還有RabbitMQ的進階,支持集群的;RabbitMQ的路由配置。
02
PART
消息隊列RabbitMQ
RabbitMQ是實現了高級消息隊列協議(AMQP)的開源消息代理軟件(亦稱面向消息的中間件)。
RabbitMQ服務器是用Erlang語言編寫的;可以支持的操作系統有:Linux/WindowsNT 到 10/Windows Server2003 到 2016/macOS/Solaris/FreeBSD/TRU64/VxWorks
RabbitMQ支持下列編程語言:C#/Python/Java/Ruby/PHP/JavaScript/Go/Elixir/Objective-C
老師主要是做C#開發培訓,老師這里將會以Windows系統作為支持給大家分享;RabbitMQ是支持Windows的
總結
以上是生活随笔為你收集整理的初识消息队列/RabbitMQ详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 玩转控件:对Dev的GridContro
- 下一篇: [Flags]标识的Enum不能使用Ht