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

Overview

dmicro GitHub release report card github issues github closed issues GoDoc view examples

dmicro简介

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

该项目的诞生离不开erpcGoFrame两个优秀的项目。

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

详细文档

中文文档

安装

go get -u -v github.com/osgochina/dmicro

推荐使用 go.mod:

require github.com/osgochina/dmicro latest
  • import
import "github.com/osgochina/dmicro"

限制

golang版本 >= 1.13

rpc服务

如何快速的通过简单的代码创建一个真正的rpc服务。 以下就是示例代码:

package main

import (
	"github.com/osgochina/dmicro/drpc"
	"github.com/osgochina/dmicro/logger"
)

func main() {
	//开启信号监听
	go drpc.GraceSignal()
	// 创建一个rpc服务
	svr := drpc.NewEndpoint(drpc.EndpointConfig{
		CountTime:   true,
		LocalIP:     "127.0.0.1",
		ListenPort:  9091,
		PrintDetail: true,
	})
	//注册处理方法
	svr.RouteCall(new(Math))
	//启动监听
	err := svr.ListenAndServe()
	logger.Warning(err)
}

// 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
}

rpc客户端

服务已经建立完毕,如何通过client链接它呢?

package main

import (
	"github.com/osgochina/dmicro/drpc"
	"github.com/osgochina/dmicro/drpc/message"
	"github.com/osgochina/dmicro/logger"
	"time"
)

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框架是怎么使用。

You might also like...
Comments
  • 同学,您这个项目引入了116个开源组件,存在3个漏洞,辛苦升级一下

    同学,您这个项目引入了116个开源组件,存在3个漏洞,辛苦升级一下

    检测到 osgochina/dmicro 一共引入了116个开源组件,存在3个漏洞

    漏洞标题:buger jsonparser Library API 安全漏洞
    缺陷组件:github.com/buger/[email protected]
    漏洞编号:CVE-2020-10675
    漏洞描述:Library是其中的一个库。
    buger jsonparser 2019-12-04之前版本中的Library API存在安全漏洞。攻击者可借助Delete调用利用该漏洞导致拒绝服务(无限循环)。
    影响范围:(∞, 1.0.0)
    最小修复版本:1.0.0
    缺陷组件引入路径:github.com/osgochina/[email protected]>github.com/lucas-clemente/[email protected]>github.com/francoispqt/[email protected]>github.com/buger/[email protected]
    

    另外还有3个漏洞,详细报告:https://mofeisec.com/jr?p=a1bd8c

    opened by ghost 4
  • How graceful works?

    How graceful works?

    1、看了一下源码,在initGraceful中会将kcp和quic的listener添加到graceful中;但是inheritListenerList中却不支持kcp和quic初始化;那么kcp和quic的AddInheritedFunc和GetInheritedFunc主要是用来做什么的?

    2、可以详细描述一下graceful实现的功能,以及触发的入口么?

    opened by moqsien 2
Releases(v1.0.1)
  • v1.0.1(Aug 13, 2022)

    v1.0.1 (2022-08-13)

    1. 修复dServer在macos下报错的问题。
    2. 增加memory registry 服务注册组件。
    3. 优化RPC Client 接口。
    4. 优化RPC Server 接口。
    5. 完善文档,增加更多的使用示例。
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Aug 1, 2022)

    v1.0.0 (2022-08-01)

    1. 发布新组件DServer,该组件是easyserver组件的升级版本。
      1. dserver服务管理功能能够让你专注于编写业务代码,编译部署后的运行时管理就交给它吧。
      2. 支持单进程,多进程模式,单进程模式方便开发,多进程模式适合业务隔离。
      3. 原生支持平滑重启功能。
      4. 方便的扩展命令行功能。
      5. 原生支持命令行ctrl,方便开启关闭服务,重启服务,开启debug模式,查看实时运行日志,查看运行指标。
      6. 更多DServer组件的介绍,请看文档
    2. supervisor组件api大改,从功能独立的组件融合进框架,更好的与dServer组合。
    3. drpc组件修复unix socket链接的监听。
    4. 增加benchmark测试用例。
    5. 完善文档,增加更多的使用示例。
    Source code(tar.gz)
    Source code(zip)
  • v0.6.2(Jun 14, 2022)

    v0.6.2 (2022-06-14)

    1. 完成服务注册功能registry
    2. 完成服务发下功能selector
    3. 增加mdns服务发现组件
    4. 升级gf依赖版本至v1.16.9
    5. 改造rpc client支持服务发现功能。
    6. easy service暴露出HelpVersion方法,方便业务调用。
    Source code(tar.gz)
    Source code(zip)
  • v0.5.2(Jan 21, 2022)

    1. 增加build.sh编译脚本,支持设置编译变量,方便使用easyservice组件使用version命令展示编译信息。
    2. 完善easyservice的日志级别配置.
    3. 移除easyservice的默认network,host,port参数支持。
    4. 增加master-worker进程模型下,worker进程异常退出后,master进程自动拉起功能。
    5. 修复了reply消息解包失败不能正确报错的问题。
    6. 修复了jsonproto协议不能正确处理字符串的问题。
    7. 增加drpc的内部日志组件,支持重设日志组件,方便与默认的日志组件区分。
    Source code(tar.gz)
    Source code(zip)
  • v0.4.0(Jan 10, 2022)

    v0.4.0 (2022-01-10)

    1. 优化easyService服务的行为,增加-c,--config参数的支持.
    2. 支持easyservice的quit命令.
    3. 修复windowmacos系统下不支持quickcp的问题.
    4. 新增兼容多平台的signal发送组件.
    5. 支持Websocket协议.
    6. 增加并发请求客户端Multiclient.
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Dec 31, 2021)

    1. 修复在dial成功后,对端马上关闭了链接,造成重试死循环的bug,增加最大重试次数.
    2. 修复平滑重启中监听地址0.0.0.0不起效的问题.
    3. 增加proxy插件的的文档及测试用例.
    4. easyservice组件进程退出之前先删除pid文件。
    5. easyservice支持从配置文件中读取sandbox的id.
    6. 支持quic协议.
    7. 支持kcp协议.
    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Dec 20, 2021)

    1. 平台兼容性支持,支持liunx,MacOS,Windows.
    2. 平滑重启 逻辑支持,支持父子进程模式以及Master-Worker模式。
    3. 支持ProtoBuf协议.
    4. 增加安全传输SecureBodyPlugin插件.
    5. 完善文档,增加框架logo.
    Source code(tar.gz)
    Source code(zip)
  • v0.1.0(Nov 2, 2021)

  • v0.0.7(Sep 26, 2021)

  • v0.0.5(Sep 6, 2021)

    1. 增加 BeforeCloseEndpoint 关闭Endpoint之前触发该事件.
    2. 增加 AfterCloseEndpointPlugin 关闭Endpoint之后触发该事件.
    3. 完善 event事件的测试用例。
    4. 完善 confg配置的测试用例。
    Source code(tar.gz)
    Source code(zip)
  • v0.0.4(Aug 28, 2021)