微服务编排框架

起始原因 是 我们公司 分布式事务 使用的是 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微服务编排框架的资料请关注Devmax其它相关文章!

浅试仿 mapstruct实现微服务编排框架详解的更多相关文章

  1. 浅析SpringBoot微服务中异步调用数据提交数据库的问题

    这篇文章主要介绍了SpringBoot微服务中异步调用数据提交数据库的问题,今天本文涉及到的知识点不难,都是很简单的crud操作,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下

  2. SpringCloud 分布式微服务架构操作步骤

    SpringCloud是一种微服务的框架,利用它我们可以去做分布式服务开发,这篇文章主要介绍了SpringCloud 分布式微服务架构,需要的朋友可以参考下

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

    这篇文章主要为大家介绍了浅试仿 mapstruct实现微服务编排框架详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. 微服务间调用Retrofit在Spring Cloud Alibaba中的使用

    这篇文章主要为大家介绍了微服务间调用Retrofit在Spring Cloud Alibaba中的使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  5. 微服务框架FEIGN使用常见问题分析

    这篇文章主要为大家介绍了微服务框架FEIGN常见问题分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  6. Spring Cloud详解实现声明式微服务调用OpenFeign方法

    这篇文章主要介绍了Spring Cloud实现声明式微服务调用OpenFeign方法,OpenFeign 是 Spring Cloud 家族的一个成员, 它最核心的作用是为 HTTP 形式的 Rest API 提供了非常简洁高效的 RPC 调用方式,希望对大家有所帮助。一起跟随小编过来看看吧

  7. 详解Java对象转换神器MapStruct库的使用

    在我们日常开发的程序中,为了各层之间解耦,一般会定义不同的对象用来在不同层之间传递数据。当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换。今天给大家介绍一个对象转换工具MapStruct,代码简洁安全、性能高,强烈推荐

  8. SpringCloud eureka(server)微服务集群搭建过程

    这篇文章主要介绍了微服务SpringCloud-eureka(server)集群搭建, 项目搭建的主要步骤和配置就是创建项目和引入pom依赖,本文通过图文示例代码相结合给大家介绍的非常详细,需要的朋友可以参考下

  9. Mapstruct对象插入数据库某个字段总是为空的bug详解

    这篇文章主要为大家介绍了在一次需求开发Mapstruct中对象插入数据库某个字段总是为空的bug问题详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. SpringSecurity微服务实战之公共模块详解

    这篇文章主要为大家介绍了SpringSecurity微服务实战之公共模块详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部