osgochina/dmicro

dmicro是一个高效、可扩展且简单易用的微服务框架。包含drpc,dserver等组件。

GoShellgomicroservicerpc
This is stars and forks stats for /osgochina/dmicro repository. As of 08 May, 2024 this repository has 255 stars and 33 forks.

让你的Golang开发无比简单 概述 DMicro是一个高效、可扩展且简单易用的微服务框架。包含DRPC,DServer等多个组件。 其中DRPC组件是rpc框架,使用endpoint作为统一对象,为RPC Server,RPC Clinet提供统一的API封装。 DRPC组件特性: 易于理解,科学合理的多层抽象。 endpoint,session,handle,message,protoco,codec,transfer filter,plugin. 支持常见的消息通讯协议json,prototbuf,http,jsronrpc,良好的抽象层让自定义消息协议变得简单快捷。 支持多种网络协议tcp,unix,kcp,quic,websocket等。。。 全生命周期的插件埋点(多达27个埋点),让插件系统能实现的功能丰富多彩。 内置 auth,heartbeat,ignorecase,proxy,securebody等插件 依托丰富的插件埋点,抽象出易于使用的Event事件系统,让你的开发如虎添翼。 高性能的网络传输层,让性能不再是瓶颈。 客户端自动重拨。 配合DServer组件,实现优雅的平滑重启,让你的服务时刻在线。 配合Registry组件,实现服务注册。 Registry组件抽象出合理的接口,方便接入多个服务注册中心,目前已实现etcd,mdns。 配合Selector组件实现服务发现功能。 使用metrics组件实现指标统计功能。 DServer应用管理组件帮助大家封装好了应用的全生命周期管理。 DServer组件特性: 采用server,service,sandbox三层结构。 让业务专注于sandbox层,支持单进程,多进程模式。做到开发debug单进程,运行单/多进程可选。 完善合理的启动命令封装,支持start,stop,reload,ctrl等命令。 不但支持drpc组件,还支持ghttp等实现平滑重启接口的其他组件(如果不需要平滑重启,所有服务组件都支持) 好用的命令行管理功能,让你能实时的管理正在运行的应用。 完善的进程管理组件supervisor,支持对进程的全生命周期管理。 详细文档 安装 go get -u -v github.com/osgochina/dmicro 推荐使用 go.mod: require github.com/osgochina/dmicro latest import import "github.com/osgochina/dmicro" 国内镜像: https://gitee.com/osgochina/dmicro 限制 golang版本 >= 1.16 使用DServer创建rpc服务 如何快速的通过简单的代码创建一个真正的rpc服务。 以下就是示例代码: // rbc_server.go package main import ( "fmt" "github.com/osgochina/dmicro/drpc" "github.com/osgochina/dmicro/dserver" "github.com/osgochina/dmicro/logger" ) // DRpcSandBox 默认的服务 type DRpcSandBox struct { dserver.BaseSandbox endpoint drpc.Endpoint } func (that *DRpcSandBox) Name() string { return "DRpcSandBox" } func (that *DRpcSandBox) Setup() error { fmt.Println("DRpcSandBox Setup") cfg := that.Config.EndpointConfig(that.Name()) cfg.ListenPort = 9091 cfg.PrintDetail = true that.endpoint = drpc.NewEndpoint(cfg) that.endpoint.RouteCall(new(Math)) return that.endpoint.ListenAndServe() } func (that *DRpcSandBox) Shutdown() error { fmt.Println("DRpcSandBox Shutdown") return that.endpoint.Close() } // Math rpc请求的最终处理器,必须集成drpc.CallCtx type Math struct { drpc.CallCtx } func (m *Math) Add(arg *[]int) (int, *drpc.Status) { // test meta logger.Infof("author: %s", m.PeekMeta("author")) // add var r int for _, a := range *arg { r += a } // response return r, nil } func main() { dserver.Authors = "[email protected]" dserver.SetName("DMicro_drpc") dserver.Setup(func(svr *dserver.DServer) { err := svr.AddSandBox(new(DRpcSandBox)) if err != nil { logger.Fatal(err) } }) } 编译 $ go build rbc_server.go 运行 $ ./rbc_server start 创建普通rpc客户端 服务已经建立完毕,如何通过client链接它呢? package main import ( "time" "github.com/osgochina/dmicro/drpc" "github.com/osgochina/dmicro/drpc/message" "github.com/osgochina/dmicro/logger" ) func main() { cli := drpc.NewEndpoint(drpc.EndpointConfig{PrintDetail: true, RedialTimes: -1, RedialInterval: time.Second}) defer cli.Close() sess, stat := cli.Dial("127.0.0.1:9091") if !stat.OK() { logger.Fatalf("%v", stat) } var result int stat = sess.Call("/math/add", []int{1, 2, 3, 4, 5}, &result, message.WithSetMeta("author", "liuzhiming"), ).Status() if !stat.OK() { logger.Fatalf("%v", stat) } logger.Printf("result: %d", result) } 通过以上的代码事例,大家基本可以了解drpc框架是怎么使用。 ctrl命令 使用ctrl命令管理正在运行的server 打开新的命令行窗口运行ctrl命令 $ ./rbc_server.exe ctl ____ ____ | _ \ / ___| ___ _ __ __ __ ___ _ __ | | | | \___ \ / _ \ | '__| \ \ / / / _ \ | '__| | |_| | ___) | | __/ | | \ V / | __/ | | |____/ |____/ \___| |_| \_/ \___| |_| Version: No Version Info Go Version: No Version Info DMicro Version: v1.0.0 GF Version: v1.16.9 Git Commit: No Commit Info Build Time: No Time Info Authors: [email protected] Install Path: D:\code\GolandProjects\dmicro\examples\simple_dserver\rbc_server.exe DMicro_drpc » 运行help命令,获取命令说明 DMicro_drpc » help 好用的服务管理工具 Commands: ========= clear clear the screen debug debug开关 exit exit the shell help use 'help [command]' for command help info, status, ps 查看当前服务状态 log 打印出服务的运行日志 reload 平滑重启服务 start 启动服务 stop 停止服务 version, v 打印当前程序的版本信息 DMicro_drpc » TODO Registry 服务注册 Selector 服务发现 Eventbus 事件总线 Supervisor 进程管理 Metrics 指标统计 OpenAPI 文档自动生成 Code gen 代码生成 Tracing 链路追踪 Broker 限流熔断 感谢 DMicro该项目的诞生离不开erpc和GoFrame两个优秀的项目。 其中drpc组件参考erpc项目的架构思想,依赖的基础库是GoFrame。 erpc GoFrame
Read on GithubGithub Stats Page
repotechsstarsweeklyforksweekly
micro/microGoJavaScriptShell11.9k01.1k0
webtorrent/webtorrentJavaScriptShell28.3k+222.7k+2
JuliaPackaging/PkgServer.jlJuliaMakefileShell360140
SuperiorOS/android_vendor_superiorMakefilePythonGo180600
status-im/nim-dnsdiscNimMakefileShell3010
sveinbjornt/PlatypusObjective-CCLex2.5k01650
matrix-org/matrix-ios-sdkObjective-CSwiftC43402030
jwjjgs/ylgyPHPTypeScriptShell270140
ericlewis/openfpga-dominosVerilogVHDLTcl23000
hasherezade/pe-bearC++CMakeC2.1k01350