GRPC的JAVA使用介绍
1.创建maven项目并且添加依赖
将下面的依赖添加到pom文件中,GRPC一共依赖四个jar包。
io.grpc
grpc-netty-shaded
1.24.0
io.grpc
grpc-protobuf
1.24.0
io.grpc
grpc-stub
1.24.0
com.google.protobuf
protobuf-java
3.8.0
#以及build
org.xolstice.maven.plugins
protobuf-maven-plugin
0.6.1
com.google.protobuf:protoc:3.10.0:exe:${os.detected.classifier}grpc-javaio.grpc:protoc-gen-grpc-java:1.24.0:exe:${os.detected.classifier}
compile
compile-custom
kr.motd.maven
os-maven-plugin
1.6.2
2. 创建proto文件,并且生成对应的java文件
文章图片
创建对应的proto目录,并且生成user.proto文件
syntax = "proto3";
option java_package = "com.jiangpeipei.net.grpc";
service user {
rpc login (LoginRequest) returns (APIResponse);
rpc logout (Empty) returns (APIResponse);
}message LoginRequest {
string username = 1;
string password = 2;
}message APIResponse {
string message = 1;
int32 code = 2;
}
message Empty {
}
【GRPC的JAVA使用介绍】代码完成后执行,mvn clean compile 执行成功后会在
target/generaten-sources/protobuf/grpc-java 和 target/generaten-sources/protobuf/java 目录下生成对应的java文件
3. 创建一个GRPC的服务
/**
* 接受请求 -> 处理 ->返回响应
*/
public class User extends userGrpc.userImplBase {@Override
public void login(LoginRequest request, StreamObserver responseObserver) {
//获取请求中的参数
String username = request.getUsername();
String password = request.getPassword();
APIResponse.Builder builder = APIResponse.newBuilder();
//简单地逻辑处理
if (username.equals(password)) {
builder.setCode(200);
builder.setMessage("SUCCESS");
} else {
builder.setCode(500);
builder.setMessage("LOGIN FAIL");
}
//响应信息
responseObserver.onNext(builder.build());
//完成后关闭通讯
responseObserver.onCompleted();
}@Override
public void logout(Empty request, StreamObserver responseObserver) {}}
4. 启动GRPC服务
public class GRPCServer {public static void main(String[] args) throws IOException, InterruptedException {Server server = ServerBuilder.forPort(9090).addService(new User()).build();
server.start();
server.awaitTermination();
}
}
5. 创建一个client 与GRPC通讯
public class GRPCClient {public static void main(String[] args) {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 9090).usePlaintext().build();
// stubs - generate from proto
//阻塞
userGrpc.userBlockingStub stub = userGrpc.newBlockingStub(channel);
User.LoginRequest loginRequest = User.LoginRequest.newBuilder().setPassword("jpp").setUsername("jpp").build();
//异步
//userGrpc.newFutureStub();
//异步
//userGrpc.newStub();
User.APIResponse apiResponse = stub.login(loginRequest);
System.out.println(apiResponse.getMessage());
}
}
6. 测试
a. 启动server端
b. 启动client端,打印SUCCESS 表示测试成功
7. 注意事项
如果有引用guava,版本升级到23.0版本以上
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量