# README
概述
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
。
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author