使用Golang搭建gRPC服务提供给.NetCore调用

本文介绍了如何使用Golang搭建gRPC服务,并让.NetCore客户端进行调用。首先,讲解了gRPC与RESTful的区别以及RPC的基础知识。接着,详细阐述了gRPC的安装过程,包括安装Goland、配置Protocol Buffer和下载protoc-gen-go。然后,通过定义Protocol Buffer文件创建gRPC服务端和客户端,并实现了服务端监听和客户端调用。最后,展示了在.NetCore项目中如何调用Golang搭建的gRPC服务。
摘要由CSDN通过智能技术生成

gRPC概述

RPC

说到gRPC就不得不提RPC,所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,简单点来说就是我A机器上写的函数可以在B机器上通过RPC协议直接调用。

它与http不同的是:

  • RPC是基于TCP实现的,RESTFUL是基于HTTP来实现的。
  • 从传输速度上来看,因为HTTP封装的数据量更多所以数据传输量更大,所以RPC的传输速度是比RESTFUL更快的。

为什么内部(约定情况下的服务与服务)使用rpc,而外部(to customer)使用http

  • 因为HTTP协议是各个框架都普遍支持的。在toC情况下,因为不知道情况来源的框架、数据形势是什么样的,所以在网关可以使用Restful利用http来接受。而在微服务内部的各模块之间因为各协议方案是公司内部自己定的,所以知道各种数据方式,可以使用TCP传输以使各模块之间的数据传输更快。所以可以网关和外界的数据传输使用RESTFUL,微服务内部的各模块之间使用RPC。

gRPC又是什么呢

gRPC是一个高性能、开源的通用RPC框架,最初是由谷歌创建的,十多年来谷歌一直使用一个称为Stubby的通用RPC基础设施来连接在其数据中心内和跨数据中心运行的大量微服务。2015年3月,Google决定构建下一个版本的Stubby并使其开源。结果就是 gRPC,它现在被谷歌以外的许多组织用于支持从微服务到“最后一英里”计算(移动、网络和物联网)的用例。

gRPC官方文档:https://www.grpc.io/docs/what-is-grpc/

在 gRPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 基于定义服务的思想,指定可以通过参数和返回类型远程调用的方法。在服务器端,服务器实现了这个接口并运行一个 gRPC 服务器来处理客户端调用。在客户端,客户端有一个存根(在某些语言中简称为客户端),它提供与服务器相同的方法。

image

安装

Golang IDE(Goland)

Goland详细步骤安装:https://blog.csdn.net/u014374975/article/details/120387180

Golang语法详解请:https://blog.csdn.net/u014374975/article/details/120463448

Protocol Buffer

可以通过Go、C++、C#、Java、Python等语言轻松的创建gRPC服务,同时也意味着它可以跨语言进行远程过程调用,那么就需要一门中间语言(IDL)来约束和定义远程过程调用之间通讯的接口约束。Google官方推荐并且使用人数最多的就是Protocol Buffer,它具有稍微简化的语法,一些有用的新功能,并支持更多语言。Proto3 目前可用于 Java、C++、Dart、Python、Objective-C、C#等

Protocol Buffer官方文档:https://developers.google.com/protocol-buffers

下载Protocal Buffer

在GitHub的protocolbuffers项目下,下载ProtocalBuffer编译器
image

配置Protocal Buffer编译器环境变量

将下载好的Protocal Buffer压缩包解压,并将运行目录配置到环境变量
image

环境变量添加完毕后,打开cmd窗口执行protoc --version,出现版本号,表示配置成功
image

protoc-gen-go

protoc-gen-go是protobuf编译插件系列中的Go版本,protoc-gen-go可以将Protocol Buffer写的接口定义转换封装为Golang代码

在下载protoc-gen-go之前,我们先设置下Golang代理地址

# 七牛云
go env -w GOPROXY=https://goproxy.cn,direct

下载protoc-gen-go

go get -u github.com/golang/protobuf/protoc-gen-go

image

如果GOPATH的bin目录下有这个文件即表示下载成功
image

定义Protocal Buffer

打开IDE,在GOPATH的src目录下创建一个pbfiles文件夹,并在文件夹中添加一个product.proto文件,用于描述接口定义

syntax = "proto3";
package pbfiles;

option go_package = "../services";

message Product{
   
    int32 id = 1;
    string name = 2;
    int32 count = 3;
    string description = 4;
}

service pdService{
   
    rpc GetProduct(Product) returns(Product);
}

添加完成后,通过protoc

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simple Han

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值