主页 > 开源代码  > 

写给Java程序员的GRPC入门系列(3)

写给Java程序员的GRPC入门系列(3)

点击上方GRPC专栏看系列

文章目录 Abstract前置依赖本文初始状态编写自己的Service实现(Server端)编写客户端 下一步

Abstract

网上有很多GRPC的例子,但是却没有能够写给普通Java开发人员手把手入门少走弯路的教程。 本教程保证按照步骤一步步来你就可以完成GRPC从0到1的构建。 源码地址:grpc-helloworld-for-java

前置依赖

装有maven和JDK。并且保证javac命令可用。

本文

本文是系列的第3篇,将编写自定义的server/service和client调用实现。 代码在分支:step3-client-server。

初始状态 git clone github /gaoxingliang/grpc-helloworld-for-java.git --跟着上一篇的branch接着修改 git step2-protobuffer 编写自己的Service实现(Server端)

新建包com.example.cs来放client和server的代码。 当然你也可以把step2生成的代码打包成jar上传maven方便共享。 并且新建类:MyUserServiceImpl.java,这里自定义实现UserService的逻辑,比如这里要求用户名密码相同才认证成功:

package com.example.cs; import com.example.grpc mon.vo.*; import com.example.grpc.user.*; import io.grpc.stub.*; public class MyUserServiceImpl extends UserGrpc.UserImplBase { @Override public void login(UserOuterClass.LoginRequest request, StreamObserver<UserOuterClass.APIResponse> responseObserver) { UserOuterClass.APIResponse.Builder resp = UserOuterClass.APIResponse.newBuilder(); if (request.getUsername().equals(request.getPassword())) { resp.setResponseCode(0); resp.setResponsemessage("OK"); } else { resp.setResponseCode(1); resp.setResponsemessage("FAIL"); } responseObserver.onNext(resp.build()); responseObserver.onCompleted(); } @Override public void logout(Vo.Empty request, StreamObserver<UserOuterClass.APIResponse> responseObserver) { // 没实现。 } }

新建GrpcServer实现:

package com.example.cs; import io.grpc.*; public class GrpcServer { public static void main(String[] args) throws Exception{ Server server = ServerBuilder.forPort(7070) .addService(new MyUserServiceImpl()) .build(); server.start(); System.out.println("server start at 7070"); server.awaitTermination(); } }

并运行,输出:

server start at 7070 编写客户端

GrpcClient.java:

package com.example.cs; import com.example.grpc.user.*; import io.grpc.*; public class GrpcClient { public static void main(String[] args) throws Exception { ManagedChannel ch = ManagedChannelBuilder.forAddress("localhost", 7070) .usePlaintext().build(); UserGrpc.UserBlockingStub stub = UserGrpc.newBlockingStub(ch); UserOuterClass.APIResponse resp = stub.login(UserOuterClass.LoginRequest.newBuilder().setUsername("hello").setPassword("world").build()); System.out.println("Response " + resp); ch.shutdown(); } }

运行并输出:

Response responsemessage: "FAIL" responseCode: 1 下一步

和springboot結合的多項目演示。

标签:

写给Java程序员的GRPC入门系列(3)由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“写给Java程序员的GRPC入门系列(3)