最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

微服務(wù)編排框架

起始原因 是 我們公司 分布式事務(wù) 使用的是 seate 分布式事務(wù)框架,現(xiàn)在只在一些小部分使用,因為考慮到seate 對性能 TCP的影響,對事務(wù)這塊沒有更多的選擇。我就在想 是不是做一個 微服務(wù) 編排框架 來解決這個問題。這里就

開發(fā)背景

  • 因為我們是saas 可能A企業(yè)要這個功能,B企業(yè)不要,通過服務(wù)編排就可以解決這種情況(還是要受制于業(yè)務(wù)的)
  • 解決分布式 事務(wù)問題,我們涉及到錢的用seate ,其他的用這個框架,能提升性能和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"));
    }
}

書寫代碼方式的選擇

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

選擇接口方式 缺點

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

選擇 注解方式

  • 代碼可讀性 會降低 因為各種情況都會放在同一個類中
  • 和之前代碼的兼容性 比較好,對代碼和抽象的能力 要求降低

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

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

方案選擇

feign

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

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

MapStruct

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

方案總結(jié)

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

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

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

兩個都分析下吧

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);
    //注冊client 配置到spring 容器
    this.registerClientConfiguration(registry, name, attributes.get("configuration"));
    //注冊動態(tài)代理類到 spring 容器
    this.registerFeignClient(registry, annotationMetadata, attributes);
}

MapStruct

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

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

相關(guān)文章

最新評論

安义县| 桃园市| 平谷区| 天柱县| 江阴市| 长治县| 中西区| 息烽县| 清丰县| 儋州市| 灌阳县| 常熟市| 威宁| 靖州| 民勤县| 咸宁市| 阳新县| 西乌珠穆沁旗| 柯坪县| 盐亭县| 蒙山县| 抚宁县| 修文县| 石楼县| 黑水县| 蓝山县| 阿克陶县| 永胜县| 额尔古纳市| 曲阳县| 谷城县| 白玉县| 松桃| 武胜县| 平山县| 颍上县| 雷山县| 海原县| 无棣县| 天祝| 揭阳市|