• Stars
    star
    261
  • Rank 156,630 (Top 4 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 3 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

让你的Golang开发无比简单

GitHub release report card github issues github closed issues GoDoc view examples OSCS Status

概述

DMicro是一个高效、可扩展且简单易用的微服务框架。包含DRPC,DServer等多个组件。

其中DRPC组件是rpc框架,使用endpoint作为统一对象,为RPC ServerRPC Clinet提供统一的API封装。

DRPC组件特性:

  • 易于理解,科学合理的多层抽象。
    • endpoint,session,handle,message,protoco,codec,transfer filter,plugin.
  • 支持常见的消息通讯协议jsonprototbuf,http,jsronrpc,良好的抽象层让自定义消息协议变得简单快捷。
  • 支持多种网络协议tcp,unix,kcp,quic,websocket等。。。
  • 全生命周期的插件埋点(多达27个埋点),让插件系统能实现的功能丰富多彩。
    • 内置 auth,heartbeatignorecase,proxy,securebody等插件
  • 依托丰富的插件埋点,抽象出易于使用的Event事件系统,让你的开发如虎添翼。
  • 高性能的网络传输层,让性能不再是瓶颈。
  • 客户端自动重拨。
  • 配合DServer组件,实现优雅的平滑重启,让你的服务时刻在线。
  • 配合Registry组件,实现服务注册。
    • Registry组件抽象出合理的接口,方便接入多个服务注册中心,目前已实现etcd,mdns
  • 配合Selector组件实现服务发现功能。
  • 使用metrics组件实现指标统计功能。

DServer应用管理组件帮助大家封装好了应用的全生命周期管理。

DServer组件特性:

  • 采用server,service,sandbox三层结构。 让业务专注于sandbox层,支持单进程,多进程模式。做到开发debug单进程,运行单/多进程可选。
  • 完善合理的启动命令封装,支持start,stopreload,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该项目的诞生离不开erpcGoFrame两个优秀的项目。

其中drpc组件参考erpc项目的架构思想,依赖的基础库是GoFrame