原英文地址:https://dev.to/junereycasuga/go-grpc-with-go-kit-3gab
对于初学者来说,用Go开发应用程序存在一定的困难,更不用说通过gRPC传输api了。在这篇文章中,我将指导你在Go kit的帮助下使用gRPC编写一个简单的Go微服务。
Go kit概述
Go kit主要开发者是Peter Bourgon,他在2015年的FOSDEM和谷歌Campus London聚会上谈到过它。正如他所设想的那样,Go kit是一个用Go构建微服务的工具包。
它提供了一组标准库(包),这些库在构建微服务时被认为是必不可少的,因此您可以专注于最重要的部分,即应用程序的业务逻辑。以下是Go kit提供的功能列表
身份验证(Basic/Casbin/ JWT)
熔断器(Hystrix / GoBreaker / HandyBreaker)
日志:提供结构化日志的接口。
度量:为服务检测提供接口。有CloudWatch, Prometheus, Graphite等的适配器。
访问限制
服务发现
跟踪(OpenCensus, OpenTracing, Zipkin)
传输(HTTP/gRPC/ nat /AWS Lambda等)
除了作为工具包之外,它还鼓励应用程序遵循良好的设计原则,比如可靠的设计原则、领域驱动设计(DDD)和六边形体系结构。
Go kit概念
Go kit的概念基于三个主要组成部分:
服务
端点
传输
Services (Business Logic)
服务(业务逻辑)
这是API的核心业务逻辑所在的位置。在Go工具包中,每个服务方法都被转换为一个端点。
端点
端点表示单个RPC方法。每个服务方法都转换为一个端点,以便在服务器和客户机之间进行RPC样式的通信。
传输
在微服务体系结构中,微服务通常通过HTTP或gRPC等传输协议进行通信。单个端点可以由多个传输公开。
项目结构
syntax = "proto3";
option go_package = "github.com/junereycasuga/gokit-grpc-demo/pb";
service MathService {
rpc Add(MathRequest) returns (MathResponse) {}
}
message MathRequest {
float numA = 1;
float numB = 2;
}
message MathResponse {
float result = 1;
}