walle的目标是灵活配置. 高性能的服务框架.开发中…
开发阶段,API并不稳定
walle框架的核心是为了所有业务数据有一个统一的处理流程,为此封装了process包.
process包 对外暴露了 OnRead(data []byte) (err error)
接口,用于接收数据(数据来源可以是tcp网络服务器,也可以是kafka或者其他MQ等等).
实际的处理流程是统一的,并且高度可定制化的(具体请查看 process处理流程)
walle为了方便快速开发,redis,mysql,excel,rpc等重复性很高的代码都采用wctl来自动生成代码, 并且采用了引用即自动初始化的方案(通过init包自动注册对应服务).
walle的配置是解耦的,每个组件独立注册自己的配置到config centra,然后从配置文件或者etcd中读取配置. 这也是方便了外部可以自定义添加任何组件.(配置解析相关代码由 gogen cfggen生成).
walle很多组件有多个选择或者很多组件选项进行自定义配置,需要根据实际情况去做选择. 比如
- 网络服务器: 网关建议采用gnet,而业务服务建议使用gotcp
- 逻辑处理: 每个用户独立协程,或者一批用户一个协程并绑定系统线程,都可以通过process包的选项来进行定制.
这里不一一列举,可以根据实际业务需要进行调整.
walle中很多组件是可以替换的,并且允许使用者自己进行定制开发,比如config centra当前提供了 配置文件和etcd两种方式, 但是实际使用者可以自己定义其他数据源.
# mock接口生成
go install github.com/golang/mock/mockgen@v1.6.0
# 代码生成(option,string,struct => interface)
go install github.com/aggronmagi/gogen@latest
# walle 命令行工具(解析wproto,excel等)
go install github.com/walleframe/wctl@latest
# wctl插件 wpb 消息生成,兼容protobuf. zap接口生成. excel代码生成
go install github.com/walleframe/wplugins/cmd/wpb@latest
# wctl插件 生成rpc代码
go install github.com/walleframe/wplugins/cmd/wrpc@lates
# wctl插件 redis代码
go install github.com/walleframe/wplugins/cmd/wredis@latest
# wctl插件 mysql代码
go install github.com/walleframe/wplugins/cmd/wdb@lates
# excel代码 使用 wctl xlsx 命令
id范围 | 定义 |
---|---|
0-100 | 基础组件 |
101-200 | 内部工具组件 |
201-500 | 业务组件 |
1000+ | 对外接口 |
已封装服务组件整理
组件 | 优先级 | 描述 | 代码仓库 | 工具 |
---|---|---|---|---|
configcentra | -1 | 配置中心服务(启动配置文件解析) | https://github.com/walleframe/svc_cfgfile | gogen cfgen |
wlogger | 1 | 日志文件 | walle | wpb |
etcdstore | 10 | etcd存储 | https://github.com/walleframe/svc_etcd | |
xlsxmgr | 20 | excel配置管理器 | https://github.com/walleframe/svc_xlsx | wctl xlsx |
dbmgr | 30 | 数据库等链接管理 | https://github.com/walleframe/svc_db | wdb |
redis | 40 | redis链接管理 | https://github.com/walleframe/svc_redis | wredis |
metrics | 100 | prometheus 监控告警组件 | walle | |
rpcclient | 180 | rpc客户端链接 | walle | wrpc |
rpcserver | 910 | rpc服务器 | walle | wrpc |
bootstrap.RegisterService
默认使用优先级 500
,自定义优先级使用 bootstrap.RegisterServiceByPriority
使用配置文件: https://github.com/walleframe/svc_cfgfile
import (
"github.com/walleframe/svc_cfgfile"
)
func main() {
svc_cfgfile.UseConfigFile()
}
使用etcd做配置中心: https://github.com/walleframe/svc_etcd/ etcdcfg
import (
"github.com/walleframe/svc_etcd/etcdcfg"
)
func main() {
etcdcfg.UseEtcdConfig()
}
https://github.com/walleframe/svc_xlsx
使用 wctl xlsx
命令生成xlsx数据和xlsx加载代码. 使用init函数进行使用关系管理.
github.com/walleframe/walle/xlsxmgr 用于管理xlsx配置加载,附带2个从本地加载json数据的插件.(simple 可以通过修过加载文件函数,从embed中加载数据 local用于从本地加载文件后监听变动)
github.com/walleframe/svc_xlsx 用于服务管理,只要程序中有使用对应的xlsx配置,自动注册加载.
import (
"github.com/walleframe/svc_etcd/etcdplugin"
)
func main() {
xlsxmgr.RegisterXlsxPlugin(etcdplugin.XlsxPlugin)
}
查看 https://github.com/walleframe/svc_redis 仓库
查看 https://github.com/walleframe/svc_db/ 仓库
所有服务组件,实现app包内的Service接口. 由bootstrap进行统一管理启动关闭流程.
生成代码引用服务定义代码,服务代码自动注册自身到 walle/app/bootstrap 内.
这样做是为了方便开发, 注册逻辑在包init时候注册,实际启动/初始化等由bootstrap控制.
所有init函数只能做注册关系操作,不能有实际逻辑处理代码.
组件类型 | 组件名 | 组件仓库 |
---|---|---|
网络IO | websocket | https://github.com/walleframe/net_websocket.git |
网络IO | gnet | https://github.com/walleframe/net_gnet.git |
网络IO | kcp | kcp支持 |