百萬年薪架構師一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

一般來說,大型應用通常會被拆分成多個子系統,這些子系統可能會部署在多台機器上,也可能只是一台機器的多個進程中,這樣的應用就是分散式應用。在討論分散式應用時,很多初學者會把它和集群這個概念搞混,因為從部署形態上看,它們都是多台機器或多個進程部署, 而且都是為了實現一個業務功能。這裡有一個簡單的區分標準:如果是一個業務被拆分成多個子業務部署在不同的伺服器上,那就是分散式應用:如果是同一個業務部署在多台伺服器上,那就是集群。而分散式應用的子系統之間並不是完全獨立的,它們需要相互通訊來共同完成某個功能,這就涉及系統間通訊了。

目前,業界通常有兩種方式來實現系統間通訊:

一種是基於遠程過程調用的方式;

一種是基於消息隊列的方式。

遠程調用

前一種就是我們常說的RPC調用,客戶端不需要知道調用的具體實現細節,只需直接調用實際存在於遠程電腦上的某個對象即可,但調用方式看起來和調用本地應用程式中的對象一樣

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

RPC是一種通過網路從遠程電腦程式上請求服務,而不需要了解底層網路技術的協議。

這句話至少有三個層面的含義。

①它是協議,說明這是一種規範,就需要有遵循這套規範的實現。典型的RPC實現包括Dubbo、Thrift、 GRPC等。

②網路通訊的實現是透明的,調用方不需要關心網路之間的通訊協議、網路I/O模型、通訊的資訊格式等。

③跨語言,調用方實際上並不清楚對端伺服器使用的是什麼程式語言。對於調用方來說,無論其使用的是何種程式語言,調用都應該成功,並且返回值也應按照調用方程式語言能理解的形式來描述。

消息隊列(今天重點)

基於消息隊列的方式是指由應用中的某個系統負責發送資訊,由關心這條消息的相應系統負責接收消息,並在收到消息後進行各自系統內的業務處理。消息可以非常簡單,比如只包含文本字元串;也可以很複雜,比如包含位元組流、位元組數組,還可能包含嵌入對象,甚至是Java對象(經過序列化的對象)。

消息在被發送後可以立即返回,由消息隊列來負責消息的傳遞,消息發布者只管將消息發布到消息隊列而不用管誰來取,消息使用者只管從消息隊列中取消息而不管是誰發布的,這樣發布者和使用者都不用知道對方的存在

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

應用場景

消息隊列在實際應用中包括如下四個場景:

  • 應用耦合:多應用間通過消息隊列對同一消息進行處理,避免調用介面失敗導致整個過程失敗;
  • 非同步處理:多應用對消息隊列中同一消息進行處理,應用間並發處理消息,相比串列處理,減少處理時間;
  • 限流削峰:廣泛應用於秒殺或搶購活動中,避免流量過大導致應用系統掛掉的情況;
  • 消息驅動的系統:系統分為消息隊列、消息生產者、消息消費者,生產者負責產生消息,消費者(可能有多個)負責對消息進行處理;

常用消息隊列

常見的四種消息隊列對比(
RabbitMQ/ActiveMQ/RocketMQ/Kafka)

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

篇幅原因,也因為時間不夠,所以,介紹就到這裡了,想要更加深入學習消息隊列的,給大家準備一份文檔,我學習消息隊列就是看的這份文檔

需要這份文檔的,關注公眾號:Java架構師聯盟,精彩福利,回復1000即可

目錄

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

內容展示

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

百万年薪架构师一文整理RabbitMQ、ActiveMQ、RocketMQ、Kafka

 

麻煩轉發,轉發分享給更多人,謝謝