<
>

浅试仿 mapstruct实现微服务编排框架详解

2022-08-29 16:59:09 来源:易采站长站 作者:

目录
微服务编排框架开发背景接口的方式通过注解的方式书写代码方式的选择方案选择feignMapStruct方案总结Feign @FeignClientMapStruct

微服务编排框架

起始原因>

开发背景

    因为我们是saas>解决分布式 事务问题,我们涉及到钱的用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"));
        }
    }
    

    书写代码方式的选择

    代码实现上都可以实现,

    选择接口方式>

      代码改动会很大node的拆分会根据开发人员的 水平 得到不同体现

      选择 注解方式

        代码可读性 会降低 因为各种情况都会放在同一个类中和之前代码的兼容性 比较好,对代码和抽象的能力 要求降低

        我感觉还是先按照 接口方式写,之前代码不动,只是新的业务才这么写,让结构清晰,增强抽象的能力。 之后可以用mapStruct 方式优化

        张小龙说的为客户/用户考虑, 到我们这 就是为了开发人员考虑。这样能节省 业务开发的改动量

        方案选择

        feign

        有@FeignClient(name>

        上生产,通过阿里云监控平台看,8g内存的机器 tps 到200 就会显示卡在这个BeanUtils 方法上

        MapStruct

        替换>

        方案总结

        我们平时学习>

        feign 可能是前面第一版会用,等后面的mapStruct demo写完了 我就升级下版本,让测试同学帮忙测试下,然后换jar 版本呗

        说实话 其实我对这种换jar包的方式 还是比较方案的,之前我都是这么干,但是涉及到改动的地方太多,我现在会从K8s 下手,直接挂 agent,不影响业务系统

        两个都分析下吧

        Feign>

        主要看 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&lt;String, Object&gt; 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 组件画图,然后写一个demo 升级版本 兼容接口 和 注解 两种方式

        明天去公司 和公司大佬们 聊聊这个组件行不,以上就是浅试仿 mapstruct实现微服务编排框架详解的详细内容,更多关于仿 mapstruct微服务编排框架的资料请关注易采站长站其它相关文章!

暂时禁止评论

微信扫一扫

易采站长站微信账号