一 .初識消息隊列/RabbitMQ詳解

1. 什麼是消息隊列

圖1:消息隊列

 

圖1就是一個消息隊列的使用結構圖,比方說買票系統需要生成訂單,不是直接就去調用訂單系統,而是通過消息隊列,把生成訂單的數據,寫入消息隊列中去,然後訂單系統就可以到消息隊列中去訂閱獲取數據,再生成訂單;消息隊列有個特點,先進先出,先存進去的就先被取出來,取出來以後,數據在隊列中被刪除,消息數據在消息隊列中是持久化存儲的;只要是沒有被取出,就會一直存儲在消息隊列中

 

如上圖,就把買票系統和生成訂單系統做了解耦;即時是生成訂單系統發生故障了,並不影響買票系統,依然可以把消息先寫入消息隊列;等生成訂單系統正常了,再繼續去生成訂單;這裏也會涉及到三個名詞---生產者/消費者/隊列;寫入消息到隊列的被稱爲生產者,在消息隊列中取出數據的被稱爲消費者;

 

在大數據高併發的情況下,服務器壓力變大,如果使用消息隊列,可以讓生產者服務器做集羣,消費者服務器也做集羣;如圖2。

圖2

 

如果生產者服務器不能滿足需求了,可以來多態服務器,來同時處理,寫入消息到消息隊列,消費者服務器如果處理能力不夠,也可以增加多個消費者服務器,來同時消費消息隊列裏的數據;從而大大的提高系統的處理能力。

 

消息隊列不僅可以實現一方寫入,一方取出,也可以是一方既可以寫入,也可以取出;既做生產者,也做消費者;如圖3

圖3

 

怎麼樣,如上圖,就可以做一個多個客戶端之間的即時通信了!

經過以上介紹,我們瞭解了什麼是消息隊列在我們技術開發中的應用,消息隊列能給我們帶來什麼。他其實就是一個第三方的一個隊列;讓要做的事情能夠排隊進行;讓多個進程協作完整業務處理;當然了,消息隊列也是一個獨立的進程;現在業界已經有很多已經成型的消息隊列引擎;下面就給大家列舉一些。

.  ZeroMQ

. 推特的Distributedlog

.  ActiveMQ:Apache旗下的老牌消息引擎

.  RabbitMQ、Kafka:AMQP的默認實現。

.  RocketMQ

.  Artemis:Apache的ActiveMQ下的子項目

.  Apollo:同樣爲Apache的ActiveMQ的子項目的號稱下一代消息引擎

以上這些消息隊列引擎,都已經比較成型,其中RabbitMQ支持的功能非常豐富,RabbitMQ支持集羣化,高可用部署架構,支持消息高可靠;支持多種編程語言;現在的技術開發都追求支持高可用,集羣,可靠性;所以,學習RabbitMQ是我們的首選;這裏我就準備把RabbitMQ給同學們做以介紹,從RabbitMQ的環境準備、環境部署;使用RabbitMQ做一個開發Demo;包括還有RabbitMQ的進階,支持集羣的;RabbitMQ的路由配置。

2. 消息隊列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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章