ScalaPB(2): 在scala中用gRPC实现微服务

   gRPC是google开源提供的一个RPC软件框架,它的特点是极大简化了传统RPC的开发流程和代码量,使用户可以免除许多陷阱并聚焦于实际应用逻辑中。作为一种google的最新RPC解决方案,gRPC具备了以下这些强项:

1、gRPC在HTTP/2协议上用protobuf取代了json实现了最佳效率

2、用IDL(Interface Definition Language),一种简单的描述语言来自动产生RPC的api源代码

3、支持blocking/non-blocking双向数据流交互,适合程序的流程控制

gRPC的使用非常简单,具体流程如下:

1、在一个.proto字符类文件中用IDL来描述用户自定义的数据类型和服务

2、用protoc编译器编译文件并产生自定义数据类型和服务的api源代码

3、在server端实现.proto中定义的服务函数

4、在client端通过自动产生的stub来调用服务

下面我们就来示范gRPC的编程流程。gRPC支持下面这几种服务类型:

1、Unary:独立的一对client-request/server-response,是我们常用的http交互模式

2、Server-Streaming:client发出一个request后从server端接收一串多个response

3、Client-Streaming:client向server发送一串多个request后从server接收一个response

4、Bidirectional-Streaming:由client首先发送request启动连接,然后在这个连接上两端可以不断交互信息。

在本篇讨论中我们先示范Unary-service的编程流程,下面是.proto文件内容:

syntax = "proto3"; import "google/protobuf/wrappers.proto"; import "scalapb/scalapb.proto"; package learn.grpc.services; /* * Returns a greeting for the given person optionally including a custom message. */ service HelloWorld { rpc SayHello(ToBeGreeted) returns (Greeting) {} } message Person { string name = 1; } message ToBeGreeted { Person person = 1; google.protobuf.StringValue msg = 2; } message Greeting { string message = 1; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wspsxz.html