SpringCloud Stream訊息驅動概述

2021-10-04 00:25:59 字數 1848 閱讀 5881

簡介

如果系統裡同時存在多種mq,可以使用使用cloud stream,只需要和stream互動就可以進行管理。

一句話,遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型

官網:中文手冊:

官方定義springcloud stream是乙個構建訊息驅動微服務的框架

應用程式通過inputs 或者 outputs 來與springcloud stream中binder物件互動。通過我們配置來binding(繫結),而springcloud stream的binder物件負責與訊息中介軟體互動,所以,我們只需要搞清楚如何與springcloud stream互動就可以方便使用訊息驅動的方式。

通過使用spring integration來連線訊息**中介軟體以實現訊息時間驅動

springcloud stream 為一些**商的訊息中介軟體產品提供了個性化的自動化配置實現,引用了發布-訂閱、消費組、分割槽的三個核心概念。

目前只支援rabbitmq、kafka

設計思想介紹

標準的mq:

生產者/消費者之間靠訊息媒介傳遞資訊內容——message

訊息必須走特定的通道——訊息通道messagechannel

訊息通道裡的訊息如何被消費呢,誰負責收發處理——訊息通道messagechannel的子介面subscribablechannel,由messagehandler訊息處理器所訂閱

比方說我們用到了rabbitmq和kafka,由於這兩個訊息中介軟體的架構上的不同,像rabbitmq有exchange,kafka有topic和partition分割槽

這些訊息中介軟體的差異性導致我們實際專案開發給我們造成了一定的困擾,我們如果用了兩個訊息佇列中的一種,後面的業務需求,我們想往另一種訊息佇列進行遷移,這時候無疑就是災難性的,一大堆東西都要重新推倒重新做,因為它跟我們的系統耦合了,這時候springcloud stream給我們提供了一種解耦合的方式

如何實現?

在沒有繫結器這個概念的情況下,我們的springboot應用要直接與訊息中介軟體進行資訊互動的時候,由於各訊息中介軟體構建的初衷不同,它們的實現細節上會有較大的差異性,通過定義繫結器作為中間層,完美的實現了應用程式與訊息中介軟體細節之間的隔離。通過向應用程式暴露統一的channel通道,使得應用程式不需要再考慮各種不同的訊息中介軟體實現。

通過定義繫結器binder作為中間層,實現了應用程式與訊息中介軟體細節之間的隔離。

binder:input對應於消費者,output對應於生產者

stream中的訊息通訊方式遵循了發布-訂閱模式,topic主題進行廣播(在rabbitmq就是exchange,在kafka是topic)

stream標準流程套路

binder:很方便的連線中介軟體,遮蔽差異

channel:通道,是佇列queue的一種抽象,在訊息通訊系統中就是實現儲存和**的媒介,通過channel對佇列進行配置

source和sink:簡單的可以理解為參照物件是springcloud stream自身,從stream發布訊息就是輸出,接收訊息就是輸入

編碼api和常用註解

SpringCloud stream 訊息分割槽

1.stream的分割槽是當訊息的提供者傳送了相同的訊息的時候,如果被集群的中的某個節點消費了那麼如果提供者在此傳送相同的訊息的時候 一致會被同乙個的消費者消費掉 分割槽的配置 提供者端需要配置的資訊 新增rabbitmq資訊 spring.rabbitmq.host 192.168.177.140...

SpringCloud Stream訊息驅動

遮蔽底層訊息中介軟體的差異,降低切換成本,統一訊息的程式設計模型。在沒有binder這個概念的情況下,springboot應用要直接與訊息中介軟體進行資訊互動的時候,由於各訊息中介軟體構建的初衷不同,他們的實現細節上有較大差異,通過定義binder作為中間層,完美實現了應用程式與訊息中介軟體細節之間...

springcloud stream訊息驅動

什麼是spring cloud stream?官方定義 spring cloud stream 是乙個構建 訊息驅動 微服務的框架。應用程式通過inputs或者outputs來與 spring cloud stream 中binder互動,通過我們配置來 binding 而 spring cloud...