原英文地址: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的概念基于三个主要组成部分:
服务
端点
传输

图片.png

Services (Business Logic)

服务(业务逻辑)
这是API的核心业务逻辑所在的位置。在Go工具包中,每个服务方法都被转换为一个端点。
端点
端点表示单个RPC方法。每个服务方法都转换为一个端点,以便在服务器和客户机之间进行RPC样式的通信。
传输
在微服务体系结构中,微服务通常通过HTTP或gRPC等传输协议进行通信。单个端点可以由多个传输公开。

项目结构

  1. syntax = "proto3";
  2. option go_package = "github.com/junereycasuga/gokit-grpc-demo/pb";
  3. service MathService {
  4. rpc Add(MathRequest) returns (MathResponse) {}
  5. }
  6. message MathRequest {
  7. float numA = 1;
  8. float numB = 2;
  9. }
  10. message MathResponse {
  11. float result = 1;
  12. }

Protobuf