亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺試仿?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ù)這塊沒有更多的選擇。我就在想 是不是做一個(gè) 微服務(wù) 編排框架 來解決這個(gè)問題。這里就

開發(fā)背景

  • 因?yàn)槲覀兪莝aas 可能A企業(yè)要這個(gè)功能,B企業(yè)不要,通過服務(wù)編排就可以解決這種情況(還是要受制于業(yè)務(wù)的)
  • 解決分布式 事務(wù)問題,我們涉及到錢的用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"));
    }
}

通過注解的方式

@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ì)代碼和抽象的能力 要求降低

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

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

方案選擇

feign

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

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

MapStruct

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

方案總結(jié)

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

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

說實(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程序通過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中死鎖與活鎖,文中通過示例代碼介紹的非常詳細(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í)部分失敗的問題解決

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

    這篇文章主要為大家詳細(xì)介紹了MybatisPlus更新時(shí)部分失敗的問題分析和解決方法,文中的代碼示例講解的非常詳細(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ì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 超詳細(xì)解釋Java反射

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

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

    Eclipse中如何顯示explorer過程解析

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

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

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

最新評(píng)論