/Matrix

Demo for gRPC

Primary LanguageJava

Matrix

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

使用protobuf生成对应java代码

$> gradle clean generateProto

实现rpc接口

@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();
    }
}

实现rpc客户端

  1. 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.
  2. 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
         
    }