中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么仿mapstruct實現微服務編排框架

發布時間:2022-08-29 16:23:45 來源:億速云 閱讀:167 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么仿mapstruct實現微服務編排框架”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么仿mapstruct實現微服務編排框架”文章能幫助大家解決問題。

開發背景

  • 因為我們是saas 可能A企業要這個功能,B企業不要,通過服務編排就可以解決這種情況(還是要受制于業務的)

  • 解決分布式 事務問題,我們涉及到錢的用seate ,其他的用這個框架,能提升性能和TPS

怎么仿mapstruct實現微服務編排框架

接口的方式

@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"));
    }
}

書寫代碼方式的選擇

代碼實現上都可以實現,

選擇接口方式 缺點

  • 代碼改動會很大

  • node的拆分會根據開發人員的 水平 得到不同體現

選擇 注解方式

  • 代碼可讀性 會降低 因為各種情況都會放在同一個類中

  • 和之前代碼的兼容性 比較好,對代碼和抽象的能力 要求降低

我感覺還是先按照 接口方式寫,之前代碼不動,只是新的業務才這么寫,讓結構清晰,增強抽象的能力。 之后可以用mapStruct 方式優化

張小龍說的為客戶/用戶考慮, 到我們這 就是為了開發人員考慮。這樣能節省 業務開發的改動量

方案選擇

feign

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

上生產,通過阿里云監控平臺看,8g內存的機器 tps 到200 就會顯示卡在這個BeanUtils 方法上

MapStruct

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

方案總結

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

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

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

兩個都分析下吧

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"));
    //注冊動態代理類到 spring 容器
    this.registerFeignClient(registry, annotationMetadata, attributes);
}

MapStruct

怎么仿mapstruct實現微服務編排框架

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

關于“怎么仿mapstruct實現微服務編排框架”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青阳县| 曲靖市| 盱眙县| 西安市| 黎城县| 江陵县| 商洛市| 乌什县| 屏东县| 同心县| 恩施市| 临安市| 唐山市| 彭山县| 新昌县| 玛纳斯县| 田林县| 嘉祥县| 正宁县| 通城县| 沂源县| 马关县| 广宗县| 灌南县| 台北市| 建德市| 巧家县| 石泉县| 阳高县| 枣阳市| 合川市| 云安县| 油尖旺区| 亳州市| 东平县| 娄底市| 武穴市| 平遥县| 岳普湖县| 来宾市| 赤城县|