rpc框架--grpc-java

本文详细介绍了如何使用grpc-java进行开发,包括环境准备、使用protoc命令行和maven生成类文件、编写服务端和客户端代码。通过实例展示了如何用python客户端访问java服务端,同时列举并解决了在配置和编译过程中遇到的问题。
摘要由CSDN通过智能技术生成

grpc-java 初探

环境准备

  1. 下载protobuf
  2. 新建maven项目

使用protoc命令行生成类文件

安装protocbuf

安装步骤略

编译 protoc-gen-grpc-java插件

下载grpc-java后,执行一下命令

cd grpc-java/compile
# 编译插件
../gradlew java_pluginExecutable
# 测试插件
../gradlew test

若看到BUILD SUCCESSFUL字样,则编译成功

编辑proto文件
syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
# java_package 用来指定生成的java类所在的包,如果该proto文件被指定编译为其他语言时,java参数失效,默认包为package
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;

# 定义服务
service Greeter {
  # 定义grpc方法,并且制订消息的请求类型和反回类型
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

# 消息类型都是protocol buffer的消息格式
message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}

grpc可以有四种服务类型
1. 简单的rcp模式,client端使用stub发送请求到服务端,然后进入等待模式,直到响应发送回client端

rpc GetFeature(Point) returns (Feature) {}
2. 服务端流式rpc,client端发送请求到服务端,返回消息序列的流数据(gets a stream to read a sequence of messages back),client从返回的流数据读取消息,直至不再有数据,如果指定服务端返回流数据类型,需使用stream关键字
rpc ListFeatures(Rectangle) returns (stream Feature) {}
3. 客户端流式rpc,client使用指定的stream方式写消息序列并发送给服务端,一旦客户端写消息完成,会等待服务端全部读取并做出响应
rpc RecordRoute(stream Point) returns (RouteSummary) {}
4. 双向流式rpc,双向流式操作独立,客户端和服务端可以以任何序列随意读写,比如,服务端可以在等待client端发送所有消息之前写响应消息,或者服务端可以选择读一个消息写一个消息或者其他的读写组合。消息的顺序都是被保存的
rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}

生成client端和server端代码

使用protocol编译器protoc和指定的grpc的一个java插件。

使用maven的protobuf插件生成相关代码
命令行:
protoc --java_out=./java/ ./proto/hello.proto

生成grpc通讯代码

protoc --plugin=protoc-gen-grpc-java=/Users/liuyu9/Documents/personal/golang/src/github.com/grpc-java/compiler/build/exe/java_plugin/protoc-gen-grpc-java --grpc-java_out=./java ./proto/hello.proto   

文件列表如下:

# GreeterGrpc包含服务端和客户端要实现的一些基本类
-rw-r--r--  1 root  staff   7352 Oct 25 18:48 GreeterGrpc.java

# 包含了protocol buffer发送、序列化、反序列化我们请求和响应代码
-rw-r--r--  1 root  staff  16207 Oct 25 18:53 HelloReply.java
-rw-r--r--  1 root  staff    501 Oct 25 18:53 HelloReplyOrBuilder.java
-rw-r--r--  1 root  staff  16192 Oct 25 18:53 HelloRequest.java
-rw-r--r--  1 root  staff    493 Oct 25 18:53 HelloRequestOrBuilder.java
-rw-r--r--  1 root  staff   3011 Oct 25 18:53 HelloWorldProto.java
编写服务端文件

编写服务端文件的工作有两部分:
1. 重写proto文件定义的服务生成的服务基类,确定服务的工作内容
2. 运行grpc服务,监听客户端请求并做出响应

package com.weibo.dorteam.grpc;

import io.grpc.Server;
import io.grpc.ServerBuilder;
import io.grpc.stub.StreamObserver;

import io.grpc.examples.helloworld.GreeterGrpc;
import io.grpc.examples.helloworld.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值