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