Demo for gRPC
Matrix
├── build.gradle
└── src
├── main
│ ├── java
│ │ └── package of java files
│ ├── proto
│ │ └── *.proto
│ ├── protoGen
│ │ └── package of java files which generated by protobuf
│ └── resources
└── test
$> gradle clean generateProto
@GRpcService
public class SomeYourService extends SomeGrpc.SomeImplBase {
@Override
public void yourMethod(SomeMessageRequest req, StreamObserver<SomeMessageReply> responseObserver) {
// your logic here
responseObserver.onNext(${value of class SomeMessageReply});
responseObserver.onCompleted();
}
}
-
Future 模式
- client
public class Client { ... // some code public ListenableFuture<Reply2ListBundle> listBundleAsnyc(String merchantCode) throws Exception { final ManagedChannel channel = ManagedChannelBuilder.forAddress(HOST, PORT).usePlaintext(true).build(); final GagaProviderGrpc.GagaProviderFutureStub stub = GagaProviderGrpc.newFutureStub(channel); return stub.listBundle(Request2ListBundle.newBuilder().setMerchantCode(merchantCode).build()); } ... // some code }
- Listener 方式
Client client = new Client();// init client ListenableFuture<Reply2ListBundle> reply = client.listBundleAsnyc(merchantCode); reply.addListener( ()->{ ... // some code will run after reply was done. } , executor); ... // some code will run in main thread.
- Callback 方式
Client client = new Client();// init client ListenableFuture<Reply2ListBundle> reply = client.listBundleAsnyc(merchantCode); Futures.addCallback(reply, new FutureCallback<Reply2ListBundle>() { @Override public void onSuccess(@Nullable Reply2ListBundle result) { ... // some code } @Override public void onFailure(@Nullable Reply2ListBundle result) { ... // some code } }); ... // some code will run in main thread.
-
Blocking 模式
- client
public class Client { ... // some code public Reply2ListBundle listBundle(String merchantCode) throws Exception { final ManagedChannel channel = ManagedChannelBuilder.forAddress(HOST, PORT).usePlaintext(true).build(); final GagaProviderGrpc.GagaProviderBlockingStub stub = GagaProviderGrpc.newBlockingStub(channel); Reply2ListBundle reply = stub.listBundle(Request2ListBundle.newBuilder().setMerchantCode(merchantCode).build()); return reply; } ... // some code }