????歡迎光臨,終于等到你啦????
??我是蘇澤,一位對技術充滿熱情的探索者和分享者。????
??持續(xù)更新的專欄《Spring 狂野之旅:從入門到入魔》 ??
本專欄帶你從Spring入門到入魔?
這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦????
努力的蘇澤http://suzee.blog.csdn.net/
?Spring Cloud Stream構建在SpringBoot之上,提供了Kafka,RabbitMQ等消息中間件的個性化配置,引入了發(fā)布訂閱、消費組和分區(qū)的語義概念? 沒學過消息中間件的可以看我之前的文章Kafka、RabbitMQ
下面是正片 按照自己的口味來食用哦(有比較難懂的地方)
目錄
本文是通過大量閱讀 和最近的一些項目的思考和總結(jié) 寫出來的 關于Spring Cloud Stream的文章不少? 但我更想以觀眾能夠輕松理解并且運用到自己的項目當中 我認為這才是技術存在的意義
Spring Cloud Stream: 消息驅(qū)動架構
引言
Spring Cloud Stream的概念和目標
事件驅(qū)動架構在現(xiàn)代微服務應用程序中的重要性
先來認識Spring Cloud Stream架構
消息驅(qū)動架構(MDA)
兩者之間的關系
Spring Cloud Stream作為實現(xiàn)MDA的框架 他是怎么做的呢?? 我把他分成以下幾點:
那么我們了解了其思想和架構 我們要如何建立到我們自己的項目當中應用這種方式呢?? 這是一個很關鍵的問題
實例講解
步驟 1:?定義平臺無關模型(PIM)
步驟 2: 配置消息中間件綁定器
步驟 3: 實現(xiàn)消息轉(zhuǎn)換和處理
步驟 4: 實現(xiàn)消息發(fā)送和接收的代碼
步驟 5: 實現(xiàn)業(yè)務邏輯
以上就是一個很簡單的MDA框架的業(yè)務demo的實現(xiàn)啦 再結(jié)合中間件的知識學習加以實踐?就能較好的構建一個云原生的項目啦
希望能夠幫到有需要的讀者 如有紕漏? 望指出!
關注我 深入學習Spring云原生系列!一起努力~?
Spring Cloud Stream: 消息驅(qū)動架構
引言
隨著云計算、微服務和大數(shù)據(jù)技術的快速發(fā)展,構建可擴展、高性能和彈性的應用程序變得越來越重要。為了滿足這些要求,許多開發(fā)人員轉(zhuǎn)向了事件驅(qū)動架構,它允許應用程序通過基于事件的方式相互通信,從而提高了系統(tǒng)的響應速度和伸縮性。在這個背景下,Spring Cloud Stream應運而生,它是一個用于構建基于事件驅(qū)動的微服務應用程序的框架,可以與現(xiàn)有的消息中間件(如Apache Kafka和RabbitMQ)無縫集成。
Spring Cloud Stream的概念和目標
Spring Cloud Stream是一個用于構建基于事件驅(qū)動的微服務應用程序的框架,其核心目標是簡化開發(fā)過程,降低消息通信的復雜性,從而使開發(fā)人員能夠?qū)W⒂诰帉憳I(yè)務邏輯。Spring Cloud Stream通過提供Binder抽象,將應用程序與消息中間件解耦,讓開發(fā)人員無需關心底層通信細節(jié)。同時,它還提供了一套豐富的API和特性,如消息分組、分區(qū)和錯誤處理,使得構建強大、可擴展的事件驅(qū)動應用程序變得更加簡單。
事件驅(qū)動架構在現(xiàn)代微服務應用程序中的重要性
事件驅(qū)動架構是指應用程序組件之間通過事件進行通信的架構。在這種架構中,組件之間的通信是異步的,基于發(fā)布-訂閱模式,這有助于實現(xiàn)以下幾個關鍵優(yōu)勢:
- 可伸縮性:應用程序可以通過增加或減少組件實例來應對不斷變化的負載,而不會對整個系統(tǒng)產(chǎn)生負面影響。
- 解耦:組件之間的通信是基于事件的,它們無需知道對方的內(nèi)部實現(xiàn),這有助于降低系統(tǒng)的復雜性和維護成本。
- 高性能:事件驅(qū)動架構允許應用程序以并行方式處理事件,從而提高了系統(tǒng)的響應速度和吞吐量。
- 彈性:由于組件之間的通信是異步的,當某個組件出現(xiàn)故障時,其他組件可以繼續(xù)處理事件,降低了單點故障的風險。
先來認識Spring Cloud Stream架構
消息驅(qū)動架構(MDA)
想象一下,我們要建造一座房子。傳統(tǒng)的方式是,我們需要手工完成從設計到建造的每一個步驟。我們首先創(chuàng)建設計圖紙,然后按照圖紙上的規(guī)格和要求一步步地建造房子。
而在MDA的方式下,我們使用了一種自動化的工具來簡化這個過程。我們首先創(chuàng)建一個高度抽象的模型,就像是一個概念上的房子草圖。這個模型與具體的實現(xiàn)技術無關,只關注房子的整體結(jié)構和功能。
接下來,我們使用工具將這個高級模型轉(zhuǎn)換為與特定實現(xiàn)技術相關的模型,就像是根據(jù)草圖創(chuàng)建了一份針對具體施工工藝的圖紙。例如,我們可以將高級模型轉(zhuǎn)換為使用鋼筋混凝土結(jié)構的房子模型。
最后,我們使用工具將這個特定實現(xiàn)技術的模型轉(zhuǎn)換為實際的代碼,就像是根據(jù)圖紙建造房子的過程。這些代碼與應用技術密切相關,最終實現(xiàn)了我們所設計的系統(tǒng)。
這種方式的好處是,自動化工具幫助我們完成了從高級模型到具體代碼的轉(zhuǎn)換,省去了手工操作的繁瑣過程。這樣,開發(fā)人員可以更加清晰地理解整個系統(tǒng)的架構,而不會受到具體實現(xiàn)技術的干擾。同時,對于復雜的系統(tǒng),也減少了開發(fā)人員的工作量。
兩者之間的關系
Spring Cloud Stream作為實現(xiàn)MDA的框架 他是怎么做的呢?? 我把他分成以下幾點:
-
定義平臺無關模型(PIM):
在Spring Cloud Stream中,你可以定義一個高度抽象的PIM,它描述了消息的生產(chǎn)者和消費者之間的通信和交互方式,而與具體的消息中間件實現(xiàn)無關。PIM可以包括消息的格式、結(jié)構、交換模式等。這個PIM可以作為系統(tǒng)設計的核心模型,獨立于具體的實現(xiàn)技術。 -
選擇和配置綁定器(Binder):
Spring Cloud Stream提供了與多種消息中間件集成的綁定器,如Kafka、RabbitMQ等。綁定器可以將PIM與特定的消息中間件進行連接,使得消息的發(fā)送和接收可以與具體的消息中間件實現(xiàn)進行交互。通過選擇和配置適當?shù)慕壎ㄆ?,你可以將PIM轉(zhuǎn)換為特定的平臺相關模型(PSM),以便與消息中間件進行通信。 -
實現(xiàn)消息轉(zhuǎn)換和處理:
Spring Cloud Stream提供了消息轉(zhuǎn)換的機制,允許你定義如何將原始消息轉(zhuǎn)換為特定的領域?qū)ο?,并在消費者之間傳遞。你可以使用消息轉(zhuǎn)換器來處理消息的序列化和反序列化,以及將消息轉(zhuǎn)換為應用程序所需的數(shù)據(jù)結(jié)構。這樣,你可以在系統(tǒng)中實現(xiàn)解耦合和靈活的消息處理。 -
自動化生成代碼:
Spring Cloud Stream提供了自動化的代碼生成能力,將PSM轉(zhuǎn)換為具體的代碼實現(xiàn)。你只需要定義好PIM和PSM之間的映射關系,Spring Cloud Stream會根據(jù)這些映射關系自動生成生產(chǎn)者和消費者的代碼,從而實現(xiàn)消息的發(fā)送和接收。這樣,你可以專注于定義PIM和PSM,并通過自動生成的代碼實現(xiàn)實際的消息處理邏輯。
那么我們了解了其思想和架構 我們要如何建立到我們自己的項目當中應用這種方式呢?? 這是一個很關鍵的問題
實例講解
拿之前做過的一個商城系統(tǒng)來說,其中包含訂單服務和庫存服務之間的消息通信。訂單服務負責接收訂單創(chuàng)建請求并發(fā)送訂單信息給庫存服務,庫存服務接收訂單信息并更新庫存。
步驟 1:?定義平臺無關模型(PIM)
在訂單服務和庫存服務之間定義一個平臺無關模型,例如一個名為Order的Java類,表示訂單信息。
public class Order {
private String orderId;
private String productId;
private int quantity;
// 其他訂單相關的屬性和方法
// Getters and setters
}
步驟 2: 配置消息中間件綁定器
在訂單服務和庫存服務的配置文件中,配置Spring Cloud Stream使用合適的消息中間件綁定器。在這個例子中,我們使用RabbitMQ作為消息中間件。
訂單服務的配置文件(application.properties):
spring.cloud.stream.bindings.sendOrder-out-destination=order-exchange
庫存服務的配置文件(application.properties):
spring.cloud.stream.bindings.receiveOrder-in-destination=order-exchange
步驟 3: 實現(xiàn)消息轉(zhuǎn)換和處理
在訂單服務中,定義一個消息發(fā)送接口并實現(xiàn)消息轉(zhuǎn)換和發(fā)送邏輯。
@EnableBinding(OrderSource.class)
public class OrderService {
@Autowired
private OrderSource orderSource;
public void createOrder(Order order) {
// 執(zhí)行訂單創(chuàng)建邏輯
// 發(fā)送訂單消息
orderSource.sendOrder().send(MessageBuilder.withPayload(order).build());
}
}
interface OrderSource {
@Output("sendOrder")
MessageChannel sendOrder();
}
在庫存服務中,定義一個消息接收接口并實現(xiàn)消息處理邏輯。文章來源:http://www.zghlxwxcb.cn/news/detail-838120.html
@EnableBinding(OrderSink.class)
public class InventoryService {
@StreamListener(target = "receiveOrder")
public void handleOrder(Order order) {
// 執(zhí)行庫存更新邏輯
}
}
interface OrderSink {
@Input("receiveOrder")
SubscribableChannel receiveOrder();
}
步驟 4: 實現(xiàn)消息發(fā)送和接收的代碼
在訂單服務中,定義一個消息發(fā)送接口并實現(xiàn)消息發(fā)送邏輯。
@EnableBinding(OrderSource.class)
public class OrderService {
@Autowired
private OrderSource orderSource;
public void createOrder(Order order) {
// 執(zhí)行訂單創(chuàng)建邏輯
// 發(fā)送訂單消息
orderSource.sendOrder().send(MessageBuilder.withPayload(order).build());
}
}
interface OrderSource {
@Output("sendOrder")
MessageChannel sendOrder();
}
在庫存服務中,定義一個消息接收接口并實現(xiàn)消息處理邏輯。
@EnableBinding(OrderSink.class)
public class InventoryService {
@StreamListener(target = "receiveOrder")
public void handleOrder(Order order) {
// 執(zhí)行庫存更新邏輯
}
}
interface OrderSink {
@Input("receiveOrder")
SubscribableChannel receiveOrder();
}
步驟 5: 實現(xiàn)業(yè)務邏輯
根據(jù)具體的業(yè)務需求,在訂單服務和庫存服務中編寫業(yè)務邏輯來處理接收到的消息。例如,在庫存服務中,你可以根據(jù)接收到的訂單消息更新庫存信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-838120.html
@EnableBinding(OrderSink.class)
public class InventoryService {
@Autowired
private InventoryRepository inventoryRepository;
@StreamListener(target = "receiveOrder")
public void handleOrder(Order order) {
// 根據(jù)訂單消息更新庫存信息
String productId = order.getProductId();
int quantity = order.getQuantity();
// 執(zhí)行庫存更新邏輯
inventoryRepository.updateInventory(productId, quantity);
}
}
以上就是一個很簡單的MDA框架的業(yè)務demo的實現(xiàn)啦 再結(jié)合中間件的知識學習加以實踐?就能較好的構建一個云原生的項目啦
希望能夠幫到有需要的讀者 如有紕漏? 望指出!
關注我 深入學習Spring云原生系列!一起努力~?
到了這里,關于【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!