grpc-gateway搭建

最近在搞grpc这块的东西,需要帮自动化测试工具把grpc转成http,用到了这块东西,折腾了好几天最终搞定

可直接看分割线一下内容

1、GRPC概述

GRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。

在 GRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,GRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 GRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

2、特性

基于HTTP/2
HTTP/2 提供了连接多路复用、双向流、服务器推送、请求优先级、首部压缩等机制。可以节省带宽、降低TCP链接次数、节省CPU,帮助移动设备延长电池寿命等。gRPC 的协议设计上使用了HTTP2 现有的语义,请求和响应的数据使用HTTP Body 发送,其他的控制信息则用Header 表示。

IDL使用ProtoBuf
GRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。压缩和传输效率高,语法简单,表达力强。

多语言支持(C, C++, Python, PHP, Nodejs, C#, Objective-C、Golang、Java)
GRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发中,其中,grpc支持C、C++、Node.js、Python、Ruby、Objective-C、PHP和C#等语言,grpc-java已经支持Android开发。

3、常见的grpc测试工具

为什么需要grpc测试工具?

目前大多数分布式服务之间的调用是基于http 1.*协议实现的,HTTP/1.* 是纯文本数据传输。而grpc框架的底层网络协议是HTTP2.0,在传输的过程中数据是二进制的,在目前的市面是还有没有比较完善和方便的测试grpc框架的测试工具,像是测试http1.*的postman这种下载就能使用的测试工具。

但是在开源社区已经有很多的贡献者给出解决方案,这些方案都是一个在grpc服务和传统的httpclient测试工具之间代建一个代理服务,将传统的http1.*的请求包装转化为grpc框架的HTTP2请求。

常用的grpc测试框架是有:

grpcc:https://github.com/njpatel/grpcc,grppc是nodejs技术实现的,一个命令行工具。

Omgrpc: https://github.com/troylelandshields/omgrpc, omgrpc是nodejs技术实现,运行一个客户端,读取解析一个protobuf文件,将message消息的结构体中的字段会映射到一张表单中,填写相关的测试数据就可以运行。

Grpc-json-proxy: https://github.com/jnewmano/grpc-json-proxy,go语言的技术实现,启动一个一个go程序做代理层,可以结合postman等流行httpclient测试工具使用。对go 语言开发的grpc服务支持较好。

 

4、什么是grpc-gateway?

grpc-gateway是ProtoC的插件。ProtoC是protobuf底层解析器,它读取GRPC服务定义,并生成一个反向代理服务器,将一个REST的JSON API转换成GRPC。这个服务器是根据您的GRPC定义中的自定义选项生成的。

它可以帮助您同时提供GRPC和REST风格的API。

它用许多编程语言生成API客户机和服务器存根,它快速、易用、带宽高效,其设计得到了Google的验证。但是,您可能还希望提供一个传统的REST API。原因可以是维护向后兼容性、支持gRPC不支持的语言或客户端,也可以是简单地维护RESTful体系结构所涉及的美学和工具。而GRPC Gateway仅生成go语言的代理,因此在搭建GRPC Gateway前需要搭建Go语言基本环境。 另外由于Go语言相关插件以及Github访问,可能需要代理才能访问。因此运行本手册建议先确保能使用代理服务器访问Golang、Github等网站

本项目旨在为您的GRPC服务提供HTTP+JSON接口。附加HTTP语义的服务中的少量配置就是使用该库生成反向代理所需的全部配置。

******************************************************************************************************************************************************

                                                                                 分割线

******************************************************************************************************************************************************

5、开始搭建:

5.1 搭建go语言环境

安装golang环境的官方文档,https://www.nats.io/documentation/tutorials/go-install/,有详细的说明,但是官方的网站,可能需要代理才能访问。

可以在

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Java + gRPC + grpc-gateway 的实践主要分为以下几个步骤: 1. 定义 proto 文件 在 proto 文件中定义需要调用的服务以及方法,同时指定请求和响应的数据类型。例如: ``` syntax = "proto3"; package example; service ExampleService { rpc ExampleMethod (ExampleRequest) returns (ExampleResponse) {} } message ExampleRequest { string example_field = 1; } message ExampleResponse { string example_field = 1; } ``` 2. 使用 protoc 编译 proto 文件 使用 protoc 编译 proto 文件,生成 Java 代码。例如: ``` protoc --java_out=./src/main/java ./example.proto ``` 3. 实现 gRPC 服务 在 Java 代码中实现定义的 gRPC 服务,例如: ``` public class ExampleServiceImpl extends ExampleServiceGrpc.ExampleServiceImplBase { @Override public void exampleMethod(ExampleRequest request, StreamObserver<ExampleResponse> responseObserver) { // 实现具体逻辑 ExampleResponse response = ExampleResponse.newBuilder().setExampleField("example").build(); responseObserver.onNext(response); responseObserver.onCompleted(); } } ``` 4. 启动 gRPC 服务器 使用 gRPC 提供的 ServerBuilder 构建 gRPC 服务器,并启动服务器。例如: ``` Server server = ServerBuilder.forPort(8080).addService(new ExampleServiceImpl()).build(); server.start(); ``` 5. 集成 grpc-gateway 使用 grpc-gateway 可以将 gRPC 服务转换为 HTTP/JSON API。在 proto 文件中添加以下内容: ``` import "google/api/annotations.proto"; service ExampleService { rpc ExampleMethod (ExampleRequest) returns (ExampleResponse) { option (google.api.http) = { post: "/example" body: "*" }; } } ``` 在 Java 代码中添加以下内容: ``` Server httpServer = ServerBuilder.forPort(8081).addService(new ExampleServiceImpl()).build(); httpServer.start(); String grpcServerUrl = "localhost:8080"; String httpServerUrl = "localhost:8081"; ProxyServerConfig proxyConfig = new ProxyServerConfig(grpcServerUrl, httpServerUrl, "/example"); HttpProxyServer httpProxyServer = new HttpProxyServer(proxyConfig); httpProxyServer.start(); ``` 6. 测试 使用 HTTP/JSON API 调用 gRPC 服务,例如: ``` POST http://localhost:8081/example Content-Type: application/json { "example_field": "example" } ``` 以上就是 Java + gRPC + grpc-gateway 的实践步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值