天天看點

Spring Cloud學習筆記27——消息總線:Spring Cloud Bus消息總線消息代理

消息總線

在微服務架構的系統中,我們通常會使用輕量級的消息代理來建構一個共用的消息主題讓系統中所有微服務執行個體都連接配接上來,由于該主題中産生的消息會被所有執行個體監聽和消費,是以我們稱它為消息總線。

在總線上的各個執行個體都可以友善地廣播一些需要讓其他連接配接在該主題上的執行個體都知道的消息,例如配置資訊的變更或者其他一些管理操作等。

由于消息總線在微服務架構系統中被廣泛使用,是以它同配置中心一樣,幾乎是微服務架構中的必備元件。

Spring Cloud

作為微服務架構綜合性解決方案,對此自然也有自己的實作,也就是

Spring Cloud Bus

。通過使用

Spring Cloud Bus

,可以非常容易地搭建起消息總線,同時實作了一些消息總線中的常用功能,比如,配合

Spring Cloud Config

實作微服務應用配置資訊的動态更新等。

消息代理

消息代理(

Message Broker

)是一種消息驗證、傳輸、路由的架構模式。它在應用程式之間起到通信排程并最小化應用之間的依賴的作用,使得應用程式可以高效地解耦通信過程。消息代理是一個中間件産品,它的核心是一個消息的路由程式,用來實作接收和分發消息,并根據設定好的消息處理流來轉發給正确的應用。它包括獨立的通信和資訊傳遞協定,能夠實作組織内部群組織間的網絡通信。設計代理的目的就是為了能夠從應用程式中傳入消息,并執行一些特别的操作。

目前版本的

Spring Cloud Bus

僅支援兩款中間件産品:

RabbitMQ

Kafka

RabbitMQ

RabbitMQ

是實作了進階消息隊列協定(

AMQP

)的開源消息代理軟體,也稱為面向消息的中間件。

AMQP

Advanced Message Queuing Protocol

的簡稱,它是一個面向消息中間件的開放式标準應用層協定,它定義了以下這些特性:

  • 消息方向
  • 消息隊列
  • 消息路由(包括點到點和釋出-訂閱模式)
  • 可靠性
  • 安全性

AMQP

要求消息的提供者和用戶端接收者的行為要實作對不同供應商可以用相同的方式(比如

SMTP

HTTP

FTP

等)進行互相操作。在以往的中間件标準中,主要還是建立在

API

級别,比如

JMS

,集中于通過不同的中間件實作來建立标準化的程式間的互操作性,而不是在多個中間件産品間實作互操作性。

RabbitMQ

AMQP

協定實作,是以它可以支援多種作業系統、多種程式設計語言,幾乎可以覆寫所有主流的企業級技術平台。在微服務架構消息中間件的選型中,它是一個非常适合且優秀的選擇。是以,在

Spring Cloud Bus

中包含了對

Rabbit

的自動化預設配置。

基本概念

  • Broker

    :可以了解為消息隊列伺服器的實體,它是一個中間件應用,負責接收消息生産者的消息,然後将消息發送至消息接收者或者其他的

    Broker

  • Exchange

    :消息交換機,是消息第一個到達的地方,消息通過它指定的路由規則,分發到不同的消息隊列中去。
  • Queue

    :消息隊列,消息通過發送和路由之後最終到達的地方,到達

    Queue

    的消息即進入邏輯上等待消費的狀态。每個消息都會被發送到一個或多個隊列。
  • Binding

    :綁定,它的作用就是把

    Exchange

    Queue

    按照路由規則綁定起來,也就是

    Exchange

    Queue

    之間的虛拟連接配接。
  • Routing Key

    :路由關鍵字,

    Exchange

    根據這個關鍵字進行消息投遞。
  • Virtual host

    :虛拟主機,它是對

    Broker

    的虛拟劃分,将消費者、生産者和它們依賴的

    AMQP

    相關結構進行隔離,一般都是為了安全考慮。比如,我們可以在一個

    Broker

    中設定多個虛拟主機,對不同使用者進行權限的分離。
  • Connection

    :連接配接,代表生産者、消費者、

    Broker

    之間進行通信的實體網絡。
  • Channel

    :消息通道,用于連接配接生産者和消費者的邏輯結構。在用戶端的每個連接配接裡,可建立多個

    Channel

    ,每個

    Channel

    代表一個會話任務,通過

    Channel

    可以隔離同一個連接配接中的不同互動内容。
  • Producer

    :消息生産者,制造消息并發送消息的程式。
  • Consumer

    :消息消費者,接收消息并處理消息的程式。

Kafka

Kafka

是一個由

LinkedIn

開發的分布式消息系統,它于

2011

年年初開源,現在由著名的

Apache

基金會維護與開發。它是基于消息釋出-訂閱模式實作的消息系統。

基本概念

  • Broker

    Kafka

    叢集包含一個或多個伺服器,這些伺服器被稱為

    Broker

  • Topic

    :邏輯上同

    RabbitMQ

    Queue

    隊列相似,每條釋出到

    Kafka

    叢集的消息都必須有一個

    Topic

    。(實體上不同

    Topic

    的消息分開存儲,邏輯上一個

    Topic

    的消息雖然儲存于一個或多個

    Broker

    上,但使用者隻需指定消息的

    Topic

    即可生産或消費資料而不必關系資料存于何處。)
  • Partition

    Partition

    是實體概念上的分區,為了提供系統吞吐率,在實體上每個

    Topic

    會分成一個或多個

    Partition

    ,每個

    Partition

    對應一個檔案夾(存儲對應分區的消息内容和索引檔案)。
  • Producer

    :消息生産者,負責生産消息并發送到

    Kafka Broker

  • Consumer

    :消息消費者,向

    Kafka Broker

    讀取消息并處理的用戶端。
  • Consumer Group

    :每個

    Consumer

    屬于一個特定的組(可為每個

    Consumer

    指定屬于一個組,若不指定則屬于預設組),組可以用來實作一條消息被組内多個成員消費等功能。

繼續閱讀