国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!

這篇具有很好參考價值的文章主要介紹了【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!,《Spring 狂野之旅:底層原理高級進階》 ??,架構,spring cloud,驅(qū)動開發(fā),云原生

????歡迎光臨,終于等到你啦????

??我是蘇澤,一位對技術充滿熱情的探索者和分享者。????

??持續(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)勢:

  1. 可伸縮性:應用程序可以通過增加或減少組件實例來應對不斷變化的負載,而不會對整個系統(tǒng)產(chǎn)生負面影響。
  2. 解耦:組件之間的通信是基于事件的,它們無需知道對方的內(nèi)部實現(xiàn),這有助于降低系統(tǒng)的復雜性和維護成本。
  3. 高性能:事件驅(qū)動架構允許應用程序以并行方式處理事件,從而提高了系統(tǒng)的響應速度和吞吐量。
  4. 彈性:由于組件之間的通信是異步的,當某個組件出現(xiàn)故障時,其他組件可以繼續(xù)處理事件,降低了單點故障的風險。

先來認識Spring Cloud Stream架構

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!,《Spring 狂野之旅:底層原理高級進階》 ??,架構,spring cloud,驅(qū)動開發(fā),云原生

消息驅(qū)動架構(MDA)

【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!,《Spring 狂野之旅:底層原理高級進階》 ??,架構,spring cloud,驅(qū)動開發(fā),云原生

想象一下,我們要建造一座房子。傳統(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云原生系列】SpringBoot+Spring Cloud Stream:消息驅(qū)動架構(MDA)解析,實現(xiàn)異步處理與解耦合!,《Spring 狂野之旅:底層原理高級進階》 ??,架構,spring cloud,驅(qū)動開發(fā),云原生

兩者之間的關系

Spring Cloud Stream作為實現(xiàn)MDA的框架 他是怎么做的呢?? 我把他分成以下幾點:

  1. 定義平臺無關模型(PIM):
    在Spring Cloud Stream中,你可以定義一個高度抽象的PIM,它描述了消息的生產(chǎn)者和消費者之間的通信和交互方式,而與具體的消息中間件實現(xiàn)無關。PIM可以包括消息的格式、結(jié)構、交換模式等。這個PIM可以作為系統(tǒng)設計的核心模型,獨立于具體的實現(xiàn)技術。

  2. 選擇和配置綁定器(Binder):
    Spring Cloud Stream提供了與多種消息中間件集成的綁定器,如Kafka、RabbitMQ等。綁定器可以將PIM與特定的消息中間件進行連接,使得消息的發(fā)送和接收可以與具體的消息中間件實現(xiàn)進行交互。通過選擇和配置適當?shù)慕壎ㄆ?,你可以將PIM轉(zhuǎn)換為特定的平臺相關模型(PSM),以便與消息中間件進行通信。

  3. 實現(xiàn)消息轉(zhuǎn)換和處理:
    Spring Cloud Stream提供了消息轉(zhuǎn)換的機制,允許你定義如何將原始消息轉(zhuǎn)換為特定的領域?qū)ο?,并在消費者之間傳遞。你可以使用消息轉(zhuǎn)換器來處理消息的序列化和反序列化,以及將消息轉(zhuǎn)換為應用程序所需的數(shù)據(jù)結(jié)構。這樣,你可以在系統(tǒng)中實現(xiàn)解耦合和靈活的消息處理。

  4. 自動化生成代碼:
    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)消息處理邏輯。

@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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • SpringBoot 如何使用 Spring Cloud Stream 處理事件

    SpringBoot 如何使用 Spring Cloud Stream 處理事件

    在分布式系統(tǒng)中,事件驅(qū)動架構(Event-Driven Architecture,EDA)已經(jīng)成為一種非常流行的架構模式。事件驅(qū)動架構將系統(tǒng)中的各個組件連接在一起,以便它們可以相互協(xié)作,響應事件并執(zhí)行相應的操作。SpringBoot 也提供了一種方便的方式來處理事件——使用 Spring Cloud Stream。 Spr

    2024年02月10日
    瀏覽(28)
  • 在Spring Cloud中使用RabbitMQ完成一個消息驅(qū)動的微服務

    Spring Cloud系列目前已經(jīng)有了Spring Cloud五大核心組件:分別是,Eureka注冊中心,Zuul網(wǎng)關,Hystrix熔斷降級,openFeign聲明式遠程調(diào)用,ribbon負載均衡。這五個模塊,對了,有沒有發(fā)現(xiàn),其實我這五個模塊中ribbon好像還沒有案例例舉,目前只有一個Ribbon模塊的搭建,后邊我會完善的

    2024年02月04日
    瀏覽(86)
  • 【Spring云原生系列】Spring RabbitMQ:異步處理機制的基礎--消息隊列 原理講解+使用教程

    【Spring云原生系列】Spring RabbitMQ:異步處理機制的基礎--消息隊列 原理講解+使用教程

    ???? 歡迎光臨,終于等到你啦 ???? ??我是 蘇澤 ,一位對技術充滿熱情的探索者和分享者。???? ??持續(xù)更新的專欄 《Spring 狂野之旅:從入門到入魔》 ?? 本專欄帶你從Spring入門到入魔 ? 這是蘇澤的個人主頁可以看到我其他的內(nèi)容哦???? 努力的蘇澤 http://suzee.blog.

    2024年03月15日
    瀏覽(30)
  • 消息驅(qū)動 —— SpringCloud Stream

    消息驅(qū)動 —— SpringCloud Stream

    Spring Cloud Stream 是用于構建消息驅(qū)動的微服務應用程序的框架,提供了多種中間件的合理配置 Spring Cloud Stream 包含以下核心概念: Destination Binders:目標綁定器,目標指的是 Kafka 或者 RabbitMQ,綁定器就是封裝了目標中間件的包,如果操作的是 Kafka,就使用 Kafka Binder,如果操作

    2024年02月08日
    瀏覽(21)
  • Sprint Cloud Stream整合RocketMq和websocket實現(xiàn)消息發(fā)布訂閱

    Sprint Cloud Stream整合RocketMq和websocket實現(xiàn)消息發(fā)布訂閱

    1. 引入RocketMQ依賴 :首先,在 pom.xml 文件中添加RocketMQ的依賴: 2. 配置RocketMQ連接信息 :在 application.properties 或 application.yml 中配置RocketMQ的連接信息,包括Name Server地址等: 3.消息發(fā)布組件 4.消息發(fā)布控制器 項目結(jié)構: 接下來是websocket模塊的搭建 1. 依賴添加 2.application.yml配

    2024年02月08日
    瀏覽(14)
  • SpringCloud之Stream消息驅(qū)動RocketMQ講解

    SpringCloud之Stream消息驅(qū)動RocketMQ講解

    本文是以 RocketMQ 為例講解,點擊此處了解SpringBoot整合RocketMQ 1.1.1 定義 Spring Cloud Stream 是一個用來為微服務應用構建消息驅(qū)動能力的框架。它可以基于 Spring Boot 來創(chuàng)建獨立的、可用于生產(chǎn)的 Spring 應用程序。 Spring Cloud Stream 為一些供應商的消息中間件產(chǎn)品提供了個性化的自動

    2024年02月12日
    瀏覽(19)
  • Spring Cloud Stream集成Kafka

    Spring Cloud Stream集成Kafka

    Spring Cloud Stream是一個構建消息驅(qū)動微服務的框架,抽象了MQ的使用方式, 提供統(tǒng)一的API操作。Spring Cloud Stream通過Binder(綁定器)、inputs/outputs Channel完成應用程序和MQ的解耦。 Binder 負責綁定應用程序和MQ中間件,即指定應用程序是和KafKa交互還是和RabbitMQ交互或者和其他的MQ中間件交

    2024年02月13日
    瀏覽(32)
  • spring Cloud Stream 實戰(zhàn)應用深度講解

    spring Cloud Stream 實戰(zhàn)應用深度講解

    Spring Cloud Stream 是一個框架,用于構建與共享消息傳遞系統(tǒng)連接的高度可擴展的事件驅(qū)動微服務。 該框架提供了一個靈活的編程模型,該模型建立在已經(jīng)建立和熟悉的 Spring 習慣用語和最佳實踐之上,包括對持久發(fā)布/訂閱語義、消費者組和有狀態(tài)分區(qū)的支持。 核心模塊 Dest

    2024年01月24日
    瀏覽(31)
  • Spring cloud stream 結(jié)合 rabbitMq使用

    之前的開發(fā)主要是底層開發(fā),沒有深入涉及到消息方面?,F(xiàn)在面對的是一個這樣的場景: 假設公司項目A用了RabbitMQ,而項目B用了Kafka。這時候就會出現(xiàn)有兩個消息框架,這兩個消息框架可能編碼有所不同,且結(jié)構也有所不同,而且之前甚至可能使用的是別的框架,造成了一個

    2024年02月04日
    瀏覽(23)
  • 《微服務實戰(zhàn)》 第十六章 Spring cloud stream應用

    《微服務實戰(zhàn)》 第十六章 Spring cloud stream應用

    第十六章 Spring cloud stream應用 第十五章 RabbitMQ 延遲隊列 第十四章 RabbitMQ應用 https://github.com/spring-cloud/spring-cloud-stream-binder-rabbit 官方定義Spring Cloud Stream是一個構建消息驅(qū)動微服務的框架。應用程序通過inputs或者outputs來與Spring Cloud Stream中binder對象交互。通過我們配置來bindin

    2024年02月06日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包