模仿 mapstruct 实现一个微服务编排框架(中)
序
起始原因 是 我们公司 分布式事务 使用的是 seate 分布式事务框架,现在只在一些小部分使用,因为考虑到seate 对性能 TCP的影响,对事务这块没有更多的选择。我就在想 是不是做一个 微服务 编排框架 来解决这个问题。这里就
微服务编排框架 开发背景
- 因为我们是saas 可能A企业要这个功能,B企业不要,通过服务编排就可以解决这种情况(还是要受制于业务的)
- 解决分布式 事务问题,我们涉及到钱的用seate ,其他的用这个框架,能提升性能和TPS
今天和 公司大佬的商量,我们现在 从业务上 解决了 分布式事务,暂时没有需要。但是我感觉 迟早能用上,不行 用不用 我都写
准备工作
写一个基础组件的 准备工作 基本就是从 create 开始,建立一个 pom文件 管理版本号
基本的规范 (不全,之后补充)
- 写代码的时候 请保证 按照 《阿里开发规范》 ,经过检查才允许提交
- version 请都放在parent pom.xml 进行指定
- 开发代码 之前 要经过技术评审(除非很小的改动不用)
建立一个目录,我这的目录是
yuye-parent -- 父项目,公共依赖
│ ├─yuye-process-engine 流程编排一级工程
│ │ ├─process-engine-wrapper 流程编排 wrapper
│ │─yuye-examples 例子pom
│ │ ├─process-engine-demo 流程编排例子
│ │ │ ├─process-engine-demo-springboot 流程编排例子-springboot 例子
组件开发基础知识
- 组件的类 往往需要 被spring 扫描,但是不能让业务系统 通过@MapperScan 来添加包名的扫描 来进行加载,因为 这样会导致 spring 加载一些没必要的文件,而且不好根据 属性来控制 加载哪几个 Service
- 有的人 会用 META-INF/spring.factories 来解决 ,但是也不行,但是这还是 那个问题,没有办法 根据属性控制 加载 **解决办法呢?**哪几个Service,@configuration注解 来用@Bean 控制记载哪些bean 就可以了
到这了 基本组件开发 容易错误的地方 就这些
流程编排组件 流程图
先来一版 简单版本,就是支持 正常流程 / 回滚流程 / 多节点选择
代码 我不就粘贴了,之后 放码云上
README.cn.md
雨夜-微服务 编排框架 yuye-process-engine
yuye-process-engine 是一个分布式编排 平台,具有低延迟,高性能和可靠性,和灵活的可扩展性。
现在公司 暂时用不上,临时想法,做一个技术储备
背景:
1 因为我们是saas 可能A企业要这个功能,B企业不要,通过服务编排就可以解决这种情况(还是要受制于业务的)
2 解决分布式 事务问题,我们涉及到钱的用seate ,其他的用这个框架,能提升性能和TPS
它提供了多种功能:
自定义流程
流程修改 即时生效
可以保证 异构数据的 事务一致性,保证 最终一致性
TPS 基本无损耗,(TODO 还在完善,需要测试)
接下来要完成的功能:
1 测试接入 现有项目 写starter (计划 2022-08-30 完成)
2 优化反射那块
3 出性能测试 结果
4 node 可视化 可以动态拖动 修改
5 流程可修改 即时生效
本段将指导您完成以不同方式安装yuye-process-engine的步骤。对于本地开发和测试,将为每个组件仅创建一个实例。
## 开始使用:
当前最新版本为 1.0-SNAPSHOT
pom.xml 添加
```
<dependencies>
<dependency>
<groupId>com.xxx</groupId>
<artifactId>xxx-process-engine-wrapper</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.xxx</groupId>
<artifactId>xxx-yuye</artifactId>
<version>1.0-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
```
Application 类添加
@EnableProcessEngine("process-demo.xml") xml名称可加 可不加 不加会从nacos 获取
默认命名为 项目名-${env}-process.xml
```
@Bean
public ProcessStateStore processStateStore() {
return new DefaultProcessStateStore(redissonClient(), new ContinueProcessRefreshPolicy());
}
private static RedissonClient redissonClient() {
Config config = new Config();
config.useSingleServer().setAddress("redis://xxx:6379")
.setConnectionMinimumIdleSize(10)
.setConnectionPoolSize(100)
.setIdleConnectionTimeout(600000)
.setSubscriptionConnectionMinimumIdleSize(10)
.setSubscriptionConnectionPoolSize(100)
.setTimeout(30000);
config.setCodec(new StringCodec());
config.setThreads(5);
config.setNettyThreads(5);
return Redisson.create(config);
}
```
正常使用
```
ProcessContext process1 = processContextFactory.getContext("process1");
process1.set("nextId", "xxx");
process1.start();
```
技术参考

未来期望

### check whether CRDs is successfully installed
### check whether operator is running
# Learn it & Contact us
如果 想 一起开发 请联系我 各个位置 (前端 / 后台 / 测试 / 产品 都需要)
提交规范
1 写代码的时候 请保证 按照 《阿里开发规范》 ,经过检查才允许提交
2 version 请都放在parent pom.xml 进行指定
3 开发代码 之前 要经过技术评审(除非很小的改动不用)
4
贡献
我们始终欢迎新的贡献,无论是琐碎的清理,大的新功能还是其他物质奖励,更多细节请参阅此处。
下节
mapStruct 源码分析
慢慢迭代吧,其实说实话 网上也有很多 开源组件,但是我们现在不特意造造轮子,以后 更没有希望,用开源的 很多人都会,你怎么证明你的价值呢? 平时多写 在公司 使用,去逼着我们迭代,进行提升,这才是正道
如果 想 一起开发 可以联系 我 各个位置 (前端 / 后台 / 测试 / 产品 都需要)欢迎参与 可以加 wx yuyezhiji
转载自:https://juejin.cn/post/7137230788738678815