ego-go 简单的 Go 微服务框架开源项目

我要开发同款
匿名用户2021年02月23日
48阅读
所属分类Google Go、程序开发、微服务框架
授权协议MIT

作品详情

EGO是一个集成里各种工程实践的框架。通过组件化的设计模式,保证了业务方能够统一的调用方式启动各种组件

使用EGO的优势

配置化驱动组件屏蔽底层组件启动细节微服务组件的可观测、可治理可插拔的Ego-Component组件FailFast理念和错误友好提示2.1提升组件熟练度我们工程师要想提升组件熟练度,首先要大量看开源组件文档和代码,然后坚持长时间使用,才能形成肌肉记忆,提升我们做业务的速度。而这一切所投入的时间和精力是非常大的。

要减少这个投入成本,让更多开发者使用好优秀的开源组件,EGO的做法是标准化所有开源组件,对其做一层封装,统一各种行为。

统一组件文件名统一组件配置参数统一组件调用API统一组件错误行为统一组件监控行为让人掌握了一种组件,就可以举一反三使用其他组件。

2.2提升故障排查效率统一错误码组件错误、慢响应、链路、常规请求拦截器埋点(服务端、客户端均会拦截)收敛错误字段注入组件关键信息:代码行号、配置名、目标地址、耗时、请求数据、响应数据调试阶段,错误高亮、格式化友好提示调试阶段,组件内置debug拦截器2.3自动生成重复代码生成代码,配置、数据解析、模版分离不依赖于语言,构建项目代码利用Go1.16特性embed,启动web,生成代码项目地址: https://github.com/gotomicro/egoctl3Ego的组件我们支持多种EGO组件,加快你的开发速度

ComponentNameCodeExampleDocHTTPServerCodeExampleDocgRPCServerCodeExampleDocGovernanceServiceCodeExampleDocJobCodeExampleDocCornjobCodeExampleDocDistributedScheduledJobCodeExampleDocHTTPClientCodeExampleDocgRPCClientCodeExampleDocgRPCClientusingETCDCodeExampleDocgRPCClientusingk8sCodeExampleDocSentinelCodeExampleDocMySQLCodeExampleDocRedisCodeExampleDocRedisDistributedlockCodeExampleDocMongoCodeExampleDocKafkaCodeExampleDocETCDCodeExampleDocK8SCodeExampleDocOauth2CodeExample 更多组件请查看:https://github.com/ego-component4EGO的定义4.1框架分层我们框架分为三个层次

核心层提供配置、日志、监控和链路,是其他组件的基石组件层提供客户端、服务端、任务端里的各种组件胶水层控制了各种组件的生命周期,错误处理4.2架构图

4.3生命周期

4.4组件分层我们认为一切均是组件,我们将组件分为四个部分:

Container处理组件类型、组件配置、组件启动Config配置参数Component组件的调用方法Options配置和组件可选项5版本要求v0.8.2以下需要go大于go1.13v0.8.3后需要go大于go1.16v1.0.0后需要go大于go1.176下载工具bash<(curl-Lhttps://raw.githubusercontent.com/gotomicro/egoctl/main/getlatest.sh)通过以上脚本,可以下载protoc工具全家桶,以及ego的protoc插件和egoctl

/usr/local/bin/egoctlEGO工具/usr/local/bin/protoc生成Pb工具/usr/local/bin/protoc-gen-go生成Pb工具/usr/local/bin/protoc-gen-go-grpc生成gRPC工具/usr/local/bin/protoc-gen-go-errors生成错误码工具/usr/local/bin/protoc-gen-openapiv2生成HTTP工具/usr/local/bin/protoc-gen-go-http生成HTTP工具7特性介绍配置驱动所有组件启动方式为组件名称.Load("配置名称").Build(),可以创建一个组件实例。如以下httpserver,egin是组件名称,server.http是配置名称egin.Load("server.http").Build()友好的debug通过开启debug配置和命令行的exportEGO_DEBUG=true,我们可以在测试环境里看到所有组件的请求里的行号、配置名、请求地址、耗时、请求数据、响应数据   

并且使用Goland同学,可以直接通过行号点击到对应的代码路径(gRPC、HTTP客户端支持行号)

链路使用opentrace协议,自动将链路加入到日志里

gRPC链路

测试代码 gRPC直连查看链路id服务端链路信息

客户端链路信息

HTTP链路

统一的错误信息

统一的监控信息

8QuickStart8.1HelloWorld配置

[server.http]port=9001host="0.0.0.0"代码

packagemainimport("github.com/gin-gonic/gin""github.com/gotomicro/ego""github.com/gotomicro/ego/core/elog""github.com/gotomicro/ego/server""github.com/gotomicro/ego/server/egin")//exportEGO_DEBUG=true&&gorunmain.go--config=config.tomlfuncmain(){iferr:=ego.New().Serve(func()*egin.Component{server:=egin.Load("server.http").Build()server.GET("/hello",func(ctx*gin.Context){ctx.JSON(200,"HelloEGO")return})returnserver}()).Run();err!=nil{elog.Panic("startup",elog.FieldErr(err))}}8.2使用命令行运行exportEGO_DEBUG=true#默认日志输出到logs目录,开启dev后日志输出到终端gorunmain.go--config=config.toml8.3如下所示

这个时候我们可以发送一个指令,得到如下结果

➜helloworldgit:(master)✗curlhttps://127.0.0.1:9001/hello"HelloEgo"%8.4更加友好的包编译使用scripts文件夹里的包编译,可以看到优雅的version提示

9更新日志Releases

ContributorsThanksforthesewonderfulpeople:

askuyWeiZhengshaoyuanPanda刘文哲zhangjunjundevincdMingDengAngeliaWbofengclannadxrLinkDuanCostaMEX7LincolnZhou
查看全文
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论