欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺試仿?mapstruct實(shí)現(xiàn)微服務(wù)編排框架詳解

 更新時(shí)間:2022年08月29日 14:05:06   作者:雨夜之寂  
這篇文章主要為大家介紹了淺試仿?mapstruct實(shí)現(xiàn)微服務(wù)編排框架詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

微服務(wù)編排框架

起始原因 是 我們公司 分布式事務(wù) 使用的是 seate 分布式事務(wù)框架,現(xiàn)在只在一些小部分使用,因?yàn)榭紤]到seate 對(duì)性能 TCP的影響,對(duì)事務(wù)這塊沒(méi)有更多的選擇。我就在想 是不是做一個(gè) 微服務(wù) 編排框架 來(lái)解決這個(gè)問(wèn)題。這里就

開發(fā)背景

  • 因?yàn)槲覀兪莝aas 可能A企業(yè)要這個(gè)功能,B企業(yè)不要,通過(guò)服務(wù)編排就可以解決這種情況(還是要受制于業(yè)務(wù)的)
  • 解決分布式 事務(wù)問(wèn)題,我們涉及到錢的用seate ,其他的用這個(gè)框架,能提升性能和TPS

接口的方式

@Component
public class AProcessorDemo extends RollbackProcessor {
    @Override
    protected void processInternal(ProcessContext context) {
        System.out.println("a RollBackProcessor " + context.get("id"));
    }
    @Override
    protected void rollback(ProcessContext context) {
        System.out.println("a rollback RollBackProcessor " + context.get("id"));
    }
}

通過(guò)注解的方式

@Component
public class AProcessorDemo  {
    @Processor(name="a")
    protected void processInternal(ProcessContext context) {
        System.out.println("a RollBackProcessor " + context.get("id"));
    }
    @ProcessoRrollback(name="a")
    protected void rollback(ProcessContext context) {
        System.out.println("a rollback RollBackProcessor " + context.get("id"));
    }
}

書寫代碼方式的選擇

代碼實(shí)現(xiàn)上都可以實(shí)現(xiàn),

選擇接口方式 缺點(diǎn)

  • 代碼改動(dòng)會(huì)很大
  • node的拆分會(huì)根據(jù)開發(fā)人員的 水平 得到不同體現(xiàn)

選擇 注解方式

  • 代碼可讀性 會(huì)降低 因?yàn)楦鞣N情況都會(huì)放在同一個(gè)類中
  • 和之前代碼的兼容性 比較好,對(duì)代碼和抽象的能力 要求降低

我感覺(jué)還是先按照 接口方式寫,之前代碼不動(dòng),只是新的業(yè)務(wù)才這么寫,讓結(jié)構(gòu)清晰,增強(qiáng)抽象的能力。 之后可以用mapStruct 方式優(yōu)化

張小龍說(shuō)的為客戶/用戶考慮, 到我們這 就是為了開發(fā)人員考慮。這樣能節(jié)省 業(yè)務(wù)開發(fā)的改動(dòng)量

方案選擇

feign

有@FeignClient(name = "provider"),其實(shí)不就是 根據(jù)注解添加代理么?和我們一樣的功能,是不是可以借鑒下,其實(shí)還是反射 拿值 做響應(yīng)的對(duì)應(yīng)

上生產(chǎn),通過(guò)阿里云監(jiān)控平臺(tái)看,8g內(nèi)存的機(jī)器 tps 到200 就會(huì)顯示卡在這個(gè)BeanUtils 方法上

MapStruct

替換 BeanUtils 復(fù)制屬性的新組件,用 生成代理類,set方法賦值 來(lái)替換了反射的方式 提升性能,減小內(nèi)存的使用。這種 也是可以的

方案總結(jié)

我們平時(shí)學(xué)習(xí) 學(xué)一個(gè)技術(shù),其實(shí)了解其原理是為了 自己寫組件的時(shí)候 ,能用上他們的思路和技術(shù) 來(lái)達(dá)到我們的目的。我個(gè)人不是很排斥學(xué)習(xí) 八股文,可以學(xué)到很多的思路 是我們能用上的。但是面試官 別光考八股文

feign 可能是前面第一版會(huì)用,等后面的mapStruct demo寫完了 我就升級(jí)下版本,讓測(cè)試同學(xué)幫忙測(cè)試下,然后換jar 版本唄

說(shuō)實(shí)話 其實(shí)我對(duì)這種換jar包的方式 還是比較方案的,之前我都是這么干,但是涉及到改動(dòng)的地方太多,我現(xiàn)在會(huì)從K8s 下手,直接掛 agent,不影響業(yè)務(wù)系統(tǒng)

兩個(gè)都分析下吧

Feign @FeignClient

主要看 FeignClientsRegistrar registerFeignClients 方法中

BeanDefinition candidateComponent = (BeanDefinition)var21.next();
if (candidateComponent instanceof AnnotatedBeanDefinition) {
    AnnotatedBeanDefinition beanDefinition = (AnnotatedBeanDefinition)candidateComponent;
    AnnotationMetadata annotationMetadata = beanDefinition.getMetadata();
    Assert.isTrue(annotationMetadata.isInterface(), "@FeignClient can only be specified on an interface");
    Map<String, Object> attributes = annotationMetadata.getAnnotationAttributes(FeignClient.class.getCanonicalName());
    String name = this.getClientName(attributes);
    //注冊(cè)client 配置到spring 容器
    this.registerClientConfiguration(registry, name, attributes.get("configuration"));
    //注冊(cè)動(dòng)態(tài)代理類到 spring 容器
    this.registerFeignClient(registry, annotationMetadata, attributes);
}

MapStruct

先實(shí)現(xiàn)一個(gè)簡(jiǎn)易的微服務(wù) 編排框架 然后 mapStruct 組件畫圖,然后寫一個(gè)demo 升級(jí)版本 兼容接口 和 注解 兩種方式

明天去公司 和公司大佬們 聊聊這個(gè)組件行不,以上就是淺試仿 mapstruct實(shí)現(xiàn)微服務(wù)編排框架詳解的詳細(xì)內(nèi)容,更多關(guān)于仿 mapstruct微服務(wù)編排框架的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot使用JSch操作Linux的方法

    SpringBoot使用JSch操作Linux的方法

    JSch是一個(gè)Java庫(kù),它提供了SSH(Secure?Shell)的Java實(shí)現(xiàn),允許Java程序通過(guò)SSH協(xié)議連接到遠(yuǎn)程系統(tǒng)(如Linux),這篇文章主要介紹了SpringBoot使用JSch操作Linux,需要的朋友可以參考下
    2023-11-11
  • Java中死鎖與活鎖的具體實(shí)現(xiàn)

    Java中死鎖與活鎖的具體實(shí)現(xiàn)

    鎖發(fā)生在不同的請(qǐng)求中,本文主要介紹了Java中死鎖與活鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Spring?Boot?配置?Hikari?數(shù)據(jù)庫(kù)連接池的操作代碼

    Spring?Boot?配置?Hikari?數(shù)據(jù)庫(kù)連接池的操作代碼

    數(shù)據(jù)庫(kù)連接池是一個(gè)提高程序與數(shù)據(jù)庫(kù)的連接的優(yōu)化,連接池它主要作用是提高性能、節(jié)省資源、控制連接數(shù)、連接管理等操作,這篇文章主要介紹了SpringBoot配置Hikari數(shù)據(jù)庫(kù)連接池,需要的朋友可以參考下
    2023-09-09
  • MybatisPlus更新時(shí)部分失敗的問(wèn)題解決

    MybatisPlus更新時(shí)部分失敗的問(wèn)題解決

    這篇文章主要為大家詳細(xì)介紹了MybatisPlus更新時(shí)部分失敗的問(wèn)題分析和解決方法,文中的代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 阿里資深技術(shù)專家:在各階段中3年經(jīng)驗(yàn)的java程序員應(yīng)該具備哪些技術(shù)能力

    阿里資深技術(shù)專家:在各階段中3年經(jīng)驗(yàn)的java程序員應(yīng)該具備哪些技術(shù)能力

    這篇文章主要介紹了阿里資深技術(shù)專家:在各階段中3年經(jīng)驗(yàn)的java程序員應(yīng)該具備哪些技術(shù)能力,本文給大家列舉了一些內(nèi)容,大家可以根據(jù)自己需要有方法的掌握,感興趣的朋友跟隨小編一起看看吧
    2020-07-07
  • swagger中如何給請(qǐng)求添加header

    swagger中如何給請(qǐng)求添加header

    這篇文章主要介紹了swagger中如何給請(qǐng)求添加header,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Java pdf和jpg互轉(zhuǎn)案例

    Java pdf和jpg互轉(zhuǎn)案例

    這篇文章主要介紹了Java pdf和jpg互轉(zhuǎn)案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • 超詳細(xì)解釋Java反射

    超詳細(xì)解釋Java反射

    本文非常詳細(xì)的講解了java反射具體的內(nèi)容以及使用,java反射在現(xiàn)今的使用中很頻繁,希望此文可以幫大家解答疑惑,可以幫助大家理解
    2021-11-11
  • Eclipse中如何顯示explorer過(guò)程解析

    Eclipse中如何顯示explorer過(guò)程解析

    這篇文章主要介紹了Eclipse中如何顯示explorer過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java求數(shù)組第二大元素示例

    java求數(shù)組第二大元素示例

    這篇文章主要介紹了java求數(shù)組第二大元素示例,需要的朋友可以參考下
    2014-04-04

最新評(píng)論