decision是一款基于Spring Cloud Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用等组件全方位增强的微服务解决方案,可通过设置Header或者配置中心配置来定义路由策略,并将路由策略传递到全链路服务中,实现在全链路中访问指定的服务版本。 decision是基于开源的字节码框架bytebuddy开发的环境治理工具,通过javaagent字节码织入技术实现,对业务代码完全透明无侵入,业务代码无需做修改即可实现服务的自定义路由,借助于类隔离机制,保证了业务代码的安全性,从而实现高效稳定的微服务环境治理方案
- 对于多团队开发多个服务时,每个团队都需要自己的一套开发环境进行及时的验证测试,导致开发环境资源和维护成本过高
- 开发人员平时想在本地进行调试时,需服务注册到注册中心,且并不是每次请求都能到达本地,而且还影响其他人使用
- 需要对服务进行灰度时,不知如何选择服务版本
- 下载代码 ,git clone https://github.com/IRONMAN-KD/decision.git
- 打包
cd decision/decision-agent
mvn package
cd decision/decision-plugin
mvn package
打包后会生成对应的文件在“decision-agent-bin”目录里
- vm参数配置 添加启动参数
-javaagent:/home/decision-agent-bin/decision-agent.jar
- decision-agent.jar 核心jar包,agent的入口
- cfg目录,包含decision-logback.xml日志配置文件,后续会添加decision相关的配置
- plugins目录,里面包含了需要织入的插件jar包
decision版本 | 分支 | Spring Cloud版本 | Spring Boot版本 |
---|---|---|---|
1.0.0 | master | Hoxton.SR5 ↑ Hoxton Greenwich Finchley |
2.3.x.RELEASE 2.2.x.RELEASE 2.1.x.RELEASE 2.0.x.RELEASE |
组件类型 | 组件名称 | 备注 |
---|---|---|
注册中心 | nacos | 已支持 |
Eureka(开发中) | 已在开发准备中 | |
Consul(开发中) | 已在开发准备中 | |
服务网关 | gateway | 已支持 |
Zuul(计划中) | 计划中 | |
消息中间件 | RabbitMq | 已支持广播模式下根据header选择消费者 |
kafaka(计划中) | 计划中 |
- 在启动时添加VM参数
-javaagent:/home/decision-agent-bin/decision-agent.jar
- 需要在nacos的配置中添加metadata的配置, 注意:当header中没有指定服务版本以及环境时,默认会选择common版本和环境进行路由,所以服务必须要有一个common版本存在
metadata:
version: common
env: common
- 通过header中配置对应服务的version信息进行服务版本的路由选择,目前有两种方式添加header信息,①通过网关的配置添加配置参数decision.header.version来配置 ②通过在外部系统的http请求中(例如在Nginx中统一配置、在前端工程中统一配置、或者在postman等工具中配置)设置header值vd-version来配置,如果两种方式都配置的话,外部系统配置优先级大于网关配置中的配置
- 当请求链路中的服务未在header中指定版本,则默认是选择common版本(所以每个服务都需要指定common版本),如为配置common版本并且header中未指定版本会导致找不到对应的服务
- 通过header中配置对应服务的env信息进行服务的路由选择,目前有两种方式添加header信息,①通过网关的配置添加配置参数decision.header.env来配置 ②通过在外部系统的http请求中(例如在Nginx中统一配置、在前端工程中统一配置、或者在postman等工具中配置)设置header值vd-env来配置,如果两种方式都配置的话,外部系统配置优先级大于网关配置中的配置
- 当请求链路中的服务未在header中指定环境或者未找到指定的环境,则默认是选择common环境,如为配置common版本并且header中未指定版本会导致找不到对应的服务
qq群: 1021457517
微信号: IronMan_lkd(请备注decision交流,进微信群)
目前还在不断更新迭代中,有兴趣的朋友可以一起参与进来!!