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

 更新时间:2022年08月29日 14:05:06   作者:雨夜之寂  
这篇文章主要为大家介绍了浅试仿 mapstruct实现微服务编排框架详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

微服务编排框架

起始原因 是 我们公司 分布式事务 使用的是 seate 分布式事务框架,现在只在一些小部分使用,因为考虑到seate 对性能 TCP的影响,对事务这块没有更多的选择。我就在想 是不是做一个 微服务 编排框架 来解决这个问题。这里就

开发背景

  • 因为我们是saas 可能A企业要这个功能,B企业不要,通过服务编排就可以解决这种情况(还是要受制于业务的)
  • 解决分布式 事务问题,我们涉及到钱的用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 = "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 组件画图,然后写一个demo 升级版本 兼容接口 和 注解 两种方式

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

相关文章

  • idea编译报错-代码没问题IDEA编译不通过的处理方案

    idea编译报错-代码没问题IDEA编译不通过的处理方案

    这篇文章主要介绍了idea编译报错-代码没问题IDEA编译不通过的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • maven项目install时忽略执行test方法的总结

    maven项目install时忽略执行test方法的总结

    这篇文章主要介绍了maven项目install时忽略执行test方法的总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 基于Redisson实现注解式分布式锁的示例代码

    基于Redisson实现注解式分布式锁的示例代码

    这篇文章主要为大家详细介绍了如何基于Redisson实现注解式分布式锁,文中的示例代码讲解详细,具有一定的参考价值,需要的可以了解一下
    2023-07-07
  • springboot实现返回文件流

    springboot实现返回文件流

    这篇文章主要介绍了springboot实现返回文件流方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • Spring入门到精通之注解开发详解

    Spring入门到精通之注解开发详解

    Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势。本文将通过示例为大家详细讲讲Spring如何实现注解开发,感兴趣的可以学习一下
    2022-07-07
  • mybatis条件语句中带数组参数的处理

    mybatis条件语句中带数组参数的处理

    这篇文章主要介绍了mybatis条件语句中带数组参数的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • IDEA Maven Mybatis generator 自动生成代码(实例讲解)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解)

    下面小编就为大家分享一篇IDEA Maven Mybatis generator 自动生成代码的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • mybatis-plus查询源码详解

    mybatis-plus查询源码详解

    这篇文章主要介绍了mybatis-plus查询源码解读,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • Java设计模式之策略模式案例详解

    Java设计模式之策略模式案例详解

    策略模式(Strategy Pattern)定义了一组同类型的算法,在不同的类中封装起来,每种算法可以根据当前场景相互替换,从而使算法的变化独立于使用它们的客户端即算法的调用者
    2022-07-07
  • 详解JavaWeb如何实现文件上传和下载功能

    详解JavaWeb如何实现文件上传和下载功能

    这篇文章主要介绍了如何利用JavaWeb实现文件的上传和下载功能,文中的示例代码讲解详细,对我们的学习或工作有一定的帮助,感兴趣的小伙伴可以学习一下
    2021-12-12

最新评论