go-chassis调研

go-chassis

https://github.com/go-chassis/go-chassis

要求:Go version>=1.12 and GO111MODULE=on

Go chassis是一个go语言微服务开发框架

go chassis特性:

插件化注册中心: 默认支持Service Center,kubernetes,istio
动态治理框架: 通过此框架,开发者可实现进程运行时配置热加载
插件化协议: 开发者可实现自己的RPC协议,默认实现了 http 和highway(RPC)
熔断降级: 支持根据超时,并发,错误率等进行服务的熔断
容错:支持重试次数等配置,并支持backoff退让重试,
路由管理: 可根据流量权重和Header匹配等配置规则,轻松实现金丝雀发布
客户端负载均衡: 支持定制策略
限流: 支持客户端和服务端限流
插件化Cipher: 支持开发者自定义加解密工具,并应用于AKSK和TLS 证书
处理链: 可支持在通信的过程中加入定制的业务逻辑
Metrics: 支持自动导出Prometheus格式的运行时监控数据
Tracing: 使用opentracing,支持用户快速对接不同分布式追踪系统
Logger: 日志工具支持扩展并下沉到不同存储中
治理: 可通过动态治理框架,在运行时热加载,熔断,负载均衡,路由等配置信息
在这里插入图片描述

请求处理过程:

不同协议请求进入到各协议Server,Server将具体的协议请求转换为Invocation统一抽象模型,并传入Handler chain,在这里Chassis已经默认实现了很多的Handler,比如熔断,限流等,最终再进入Transport handler,使用具体的协议客户端传输到目标。

Rest service

在这里插入图片描述
(1)编写一个结构来保存http逻辑和url模式
在这里插入图片描述
(2)编写url模式
在这里插入图片描述
(3)修改配置文件chassis.yaml
在这里插入图片描述
(4)注册
chassis.RegisterSchema("rest", &RestFulHello{})
(5)修改配置文件microservice.yaml

service_description:
  name: RESTServer # name your provider

(6)启动服务

func main() {
    //start all server you register in server/schemas.
    if err := chassis.Init(); err != nil {
        lager.Logger.Error("Init failed.", err)
        return
    }
    chassis.Run()
}
gRPC service
schemas
`-- helloworld
    `-- helloworld.proto

(1)写proto文件

syntax = "proto3";

package helloworld;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

(2)protoc --go_out=plugins=grpc:. helloworld.proto

protoc --go_out=plugins=grpc:. helloworld.proto

schemas
`-- helloworld
    |-- helloworld.pb.go
    `-- helloworld.proto

(3)手动更改helloworld.pb.go中的一个变量, 必须将_Greeter_serviceDesc改为Greeter_serviceDesc

var _Greeter_serviceDesc = grpc.ServiceDesc{
	ServiceName: "helloworld.Greeter", // use this as the schemaID when consumer call provider
	HandlerType: (*GreeterServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "SayHello",
			Handler:    _Greeter_SayHello_Handler,
		},
	},
	Streams:  []grpc.StreamDesc{},
	Metadata: "helloworld.proto",
}

(4)写接口,将业务逻辑注册到go chassis

type Server struct{}

// SayHello implements helloworld.GreeterServer
func (s *Server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}

//注册
chassis.RegisterSchema("grpc", &Server{}, server.WithRPCServiceDesc(&pb.Greeter_serviceDesc))

(5)修改配置文件chassis.yaml,最小配置项需要配置服务中心,以及指定需要启动的协议服务器

cse:
  service:
    registry:
      address: http://127.0.0.1:30100
  protocols:
    grpc:
      listenAddress: 127.0.0.1:5000

(6) 修改microservice.yaml,为这个微服务起个名字

service_description:
  name: RPCServer

(7)启动服务

func main() {
    //start all server you register in server/schemas.
    if err := chassis.Init(); err != nil {
        lager.Logger.Errorf("Init failed: %s", err)
        return
    }
    chassis.Run()
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值