社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
插件用于生成gRPC服务端与客户端类。
过程中gradle下载比较慢,可自己手动下载,自己google,aliyun的mavne源还会有proto-xx的jar包下载失败,我自己下载下载,mvn install --xxx 安装到本地,应该还可以到中央仓库,可以自动下载就是有点慢跑,../gradlew build 每次手动安装jar包每build第一次都会失败,第二次运行才成功
syntax = "proto3";option java_multiple_files = true;option java_generic_services = true;option java_package = "com.example.bean";message QueryRequest { string query = 1; int32 page_number = 2; int32 result_per_page = 3;}message QueryResponse { string res = 1;}service IndexService { rpc queryApi(QueryRequest) returns(QueryResponse);}
protoc --plugin=protoc-gen-grpc-java=/Users/ttylang/gitee/grpc-java/compiler/build/exe/java_plugin/protoc-gen-grpc-java --grpc-java_out=./java --java_out=./java ./hello.proto
io.grpc grpc-all 1.20.0
//业务服务处理类 继承IndexServiceGrpc.IndexServiceImplBase类public class IndexServiceImpl extends IndexServiceGrpc.IndexServiceImplBase { @Override public void queryApi(QueryRequest req, io.grpc.stub.StreamObserver responseObserver) { //封装Response响应,业务代码 ...... QueryResponse reply = QueryResponse.newBuilder().setRes("这是你查询的结果").build();s responseObserver.onNext(reply); responseObserver.onCompleted(); }}//Server端启动public class ServerDemo { private Server server; public ServerDemo(int port){ try { this.server = ServerBuilder.forPort(port) .addService(new IndexServiceImpl()) .build(); }catch (Exception e){ e.printStackTrace(); } } public void start(){ try{ System.out.println("start server and listen 5001"); this.server.start(); this.server.awaitTermination(); }catch (Exception e){ e.printStackTrace(); } } public void stop(){ if(this.server!=null) this.server.shutdown(); } public static void main(String[] args) { ServerDemo server = new ServerDemo(5001); server.start(); }}
public static void sendReq(){ ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build(); IndexServiceGrpc.IndexServiceBlockingStub blockingStub = IndexServiceGrpc.newBlockingStub(managedChannel); QueryRequest req = QueryRequest.newBuilder().setPageNumber(1).setResultPerPage(10).setQuery("*.java").build(); QueryResponse resp = blockingStub.queryApi(req); System.out.println(resp.getRes());}
//异步客户端 ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build(); IndexServiceGrpc.IndexServiceFutureStub asyncStub = IndexServiceGrpc.newFutureStub(managedChannel); ListenableFuture future = asyncStub.queryApi(req);while(!future.isDone()){ System.out.println("异步:"+future.get().getRes());}
//异步+回调的客户端IndexServiceGrpc.IndexServiceStub callbackStub = IndexServiceGrpc.newStub(managedChannel);callbackStub.queryApi(req,new StreamObserver(){ @Override public void onNext(QueryResponse value) { System.out.println("回调:"+value.getRes()); } @Override public void onError(Throwable t) { t.printStackTrace(); } @Override public void onCompleted() { System.out.println("onCompleted"); }});
syntax = "proto3";option java_multiple_files = true;option java_generic_services = true;option java_package = "com.example.bean";message QueryRequest { int32 number = 2;}message QueryResponse { string res = 1;}service IndexService { rpc queryApi(stream QueryRequest) returns(stream QueryResponse);}
protoc --plugin=protoc-gen-grpc-java=/Users/ttylang/gitee/grpc-java/compiler/build/exe/java_plugin/protoc-gen-grpc-java --grpc-java_out=./java --java_out=./java ./stream.proto
//服务实现类public class IndexServiceStreamImpl extends IndexServiceGrpc.IndexServiceImplBase { @Override public StreamObserver queryApi(StreamObserver responseObserver) { StreamObserver streamObserver = new StreamObserver() { @Override public void onNext(QueryRequest value) { System.out.println("stream server:"+value.getNumber()); QueryResponse resp = QueryResponse.newBuilder().setRes(value.getNumber() + " x 2" + " = " + (value.getNumber()<<1)).build(); responseObserver.onNext(resp); } @Override public void onCompleted() { System.out.println("stream Server 计算结束"); } @Override public void onError(Throwable t) { t.printStackTrace(); } }; return streamObserver; }}// 服务类public class BootStrapServer { private Server server; private int port; public BootStrapServer(int port){ this.port = port; try { this.server = ServerBuilder.forPort(port) .addService(new IndexServiceStreamImpl()) .build(); }catch (Exception e){ e.printStackTrace(); } } public void start(){ try{ System.out.println("start server and listen "+this.port); this.server.start(); this.server.awaitTermination(); }catch (Exception e){ e.printStackTrace(); } } public void stop(){ if(this.server!=null) this.server.shutdown(); } //启动方法 public static void main( String[] args ) { BootStrapServer server = new BootStrapServer(5002); server.start(); }}
public class ClientDemo { public static void main(String[] args) { ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!