gmsec 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
gmsec 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
gmsec 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
gmsec 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
gmsec 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 Apache
开发语言 Google Go 查看源码 »
操作系统 跨平台
软件类型 开源软件
所属分类 程序开发微服务框架
开源组织
地区 国产
投 递 者 xxjwxc
适用人群 未知
收录时间 2021-03-29

软件简介

gmsec 是一款 Golang 微服务集成框架。

特点

  • 打通grpc + gin,同时支持grpc 跟 restful 模式
  • grpc , gin 公用端口
  • gorm 嵌入,自动数据库代码生成

golang 微服务集成框架

安装

  • install

  • proto环境安装

 make install 
  • 本地环境搭建(gmsec为例)
make gen
  • 新建一个服务
make new service=[服务名]

proto定义

syntax = "proto3"; // 指定proto版本
package proto;     // 指定包名
option go_package = ".;proto"; // 指定路径

// 定义Hello服务
service Hello {
    // 定义SayHello方法
    rpc SayHello(HelloRequest) returns (HelloReply) {}
}
// HelloRequest 请求结构
message HelloRequest {
    string name = 1; // 名字
}
// HelloReply 响应结构
message HelloReply {
    string message = 1; // 消息
}

服务端代码示例

package main

import (
	"context"
	"fmt"
	proto "gmsec/rpc/gmsec"

	"github.com/gmsec/goplugins/api"
	"github.com/gin-gonic/gin"
	"github.com/gmsec/goplugins/plugin"
	"github.com/gmsec/micro"
	"github.com/xxjwxc/ginrpc"
)

func main() {
	// grpc 相关 初始化服务
	service := micro.NewService(
		micro.WithName("lp.srv.eg1"),
	)
	h := new(hello)
	proto.RegisterHelloServer(service.Server(), h) // 服务注册
	// ----------- end

	// gin 相关
	base := ginrpc.New(ginrpc.WithCtx(api.NewAPIFunc), ginrpc.WithDebug(dev.IsDev()))
	router := gin.Default()
	v1 := router.Group("/xxjwxc/api/v1")
	base.Register(v1, h) // 对象注册
	// ------ end

	plg, _ := plugin.Run(plugin.WithMicro(service),// grpc 入口
		plugin.WithGin(router), // http 入口
        plugin.WithAddr(":8080")) // 开始服务(公用端口)
    
	plg.Wait() // 等待结束(ctrl+c)
    
	fmt.Println("done")
}

// Ctx gin.Context 到 context.Context 的转换
func Ctx(c *gin.Context) interface{} {
	return context.Background()
}

客户端代码:

package main

import (
	"context"
	"fmt"
	proto "gmsec/rpc/gmsec"

	"github.com/gmsec/micro"
)

func main() {
    // reg := registry.NewDNSNamingRegistry()
	// grpc 相关 注册服务发现等
	micro.NewService(
        micro.WithName("lp.srv.eg1"),
        // micro.WithRegisterTTL(time.Second*30),      //指定服务注册时间
        // micro.WithRegisterInterval(time.Second*15), //让服务在指定时间内重新注册
        // micro.WithRegistryNaming(reg),
	)
	// ----------- end

	say := proto.GetHelloClient()
	ctx := context.Background()
	resp, _ := say.SayHello(ctx, &proto.HelloRequest{Name:"xxjwxc"})
	fmt.Println("result:", resp)
}

更多示例 => 传送门

正在做

  • etcdv3

传送门

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
暂无内容
暂无内容
0 评论
3 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部