# service-box-framework **Repository Path**: dennis-kk/service-box-framework ## Basic Information - **Project Name**: service-box-framework - **Description**: service-box rpc 微服务开发脚手架 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: v0.4.0-alpha - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-06-30 - **Last Updated**: 2022-12-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # service-box-framework > service-box 是一款c++的微服务框架,提供服务发现,服务治理,redis等封装。 > framework service-box 源码的发行版本,屏蔽了更多脚本操作细节,便于使用service-box-gui 进行操作 ## Introduction service-box rpc 微服务开发脚手架 ## Architecture ![输入图片说明](https://images.gitee.com/uploads/images/2021/0720/161748_32a15f27_1271151.png "企业微信截图_20210720161605.png") 综述: 整个framework系统的整体架构如图。设计上的总思想为统一的图形界面与统一的仓库管理;不同语言框架实现自己的生成,编译,测试,打包与发布脚本。用户实现基于语言特性,生成自己的implement工程。最底层与通用的功能采用是统一协议的framework。下面将仔细讲解每一层的结构。 - service-box gui tool: 图形操作界面,基于imgui 实现的跨平台图形操作系统,对repo层的脚本进行封装,简化用户操作细节。 - rpc-repo: 仓库管理层,定义的功能为管理项目服务,提供能了代码生成,一键编译,单元测试,服务打包,发布等功能;每个语言需要实现自己需要的脚本模块的功能。使用统一的repo.py脚本进行控制调用 - generate: driver.py 脚本的派生,现已经支持cpp golang lua csharp 四种语言。实现 repo 脚本 -a,add命令和-u,update 命令;其功能定义为向仓库中添加或更新idl,并且生成对应的proxy,stub,impl代码。 - compile:针对编译型语言,实现了repo 脚本 -b 命令;其功能为生成cmake工程,并且调用当前平台的编译器进行编译 - unittest:实现了repo脚本 --test命令;其功能为根据服务,生成每一个method的单元测试框架 - package:打包功能,职责范围待定 - publish: 发布脚本,其功能定义为,生成对应语言的发布配置与编译配置(可选),将多个服务大包为一个可运行程序。 - impl: 用户实现层,微服务中用户需要实现的method,不同语言会生成不同的目录结构,现在开出了四个语言的结构。sdk是否放在这一层待定。 - framework: service-box 统一功能开发脚手架,根据不同语言提供不同的脚手架;cpp版本提供头文件与动态库文件。go版本提供开发包。 ## Index 对于repo这一层关键部分其目录结构设计如下 ```shell ├── bin //可执行程序的目录 ├── example //实例idl ├── mock //连通性测试使用的工程 │   ├── cmock // c++版本 │   ├── gomock // go语言版本 │   └── template //相关模板 ├── thirdparty //第三方库 │   ├── bin //一些编译好的工具 │   ├── include // 头文件 │   └── lib //第三方库 ├── framework │   ├── service-box-cpp-framework │   │ ├── include │   │ └── lib │   └── service-bo-go-framework |——— sdk_unittest | ├── framework // 测试框架代码 | ├── src // 用户的测试用例源代码 | └── CMakeLists.txt // 测试用例编译cmake配置 ├── tool //工具脚本 ├── assests // 资源目录 ├── tmp //中间文件 │   ├── rpc-backend-cpp │   └── rpc-frontend └── usr //用户实现 ├── gopack ├── lua ├── csproj └── impl ``` - bin: 用于存放各种生成工具,比如rpc-frontend,cppgen,gogen,luagen脚本等各种生成工具 - mock:详情见各个语言说明文档 - thirdparty: cpp 版本的第三方库,不知道这里要不要多一层目录结构,或者干脆移动到service-box-cpp-framework目录中。 - framework: 脚手架,不同语言的box框架,去掉源码 - tool:各种 初始,跨平台的环境安装脚本 - assests:zookeeper,redis,ngnix等依赖资源 - usr:用于实现的服务的路径 - tmp:用于存放中间工程 ## Workflow 使用framework的工作流 > ![服务实现工作流](https://images.gitee.com/uploads/images/2021/0720/203644_2fdcab58_1271151.png "image-20210617195100725.png") ### Install cpp 安装framework的工作流,每次都从最新的tag的进行安装,允许用户自行输入tag如果不存在,会报错。 go 版本采用go mod,需要开发对应的包装脚本 ![安装更新脚本工作流](https://images.gitee.com/uploads/images/2021/0720/203714_f6936b95_1271151.png "企业微信截图_20210720202721.png") ### Package & Compile > c++服务 打包与编译流程 > > 说明:1. 所有的服务最终发布的均为动态链接库。 2. 服务按照 proxy, stub && impl 拆分, proxy 用于客户端sdk框架打包。 3. 动态库中编译时候提供唯一宏标识版本 ![编译打包工作流](https://images.gitee.com/uploads/images/2021/0720/203736_3bff1ead_1271151.png "企业微信截图_20210720202712.png") - 检查工程,创建和生成 - 检查版本,如果远端仓库不存在则创建初始版本号;如果远端仓库存在,则获取最新版本号;然后增加版本号;同时允许用户输入版本号。 - 编译并安装 ## update workflow ![更新工作流](https://images.gitee.com/uploads/images/2021/0809/201439_73f1c701_1271151.png "屏幕截图.png") - 基于源码更新,windows和linux分别执行对应的脚本,执行安装工作流,安装完成清理源码 - 基于framework更新,framework是编译和发布完的版本,可以直接使用这个进行更新 , ## Usage > TODO