Grpc 中 ListenableFuture 风格存根和异步存根之间的区别 java
Difference between ListenableFuture-style stub and async stub in grpc java
在 gRPC java 实现中,ListenableFuture 风格的存根和异步存根有什么区别?
异步通信使用哪个?
public static MyServiceStub newStub(io.grpc.Channel channel) {
io.grpc.stub.AbstractStub.StubFactory<MyServiceStub> factory =
new io.grpc.stub.AbstractStub.StubFactory<MyServiceStub>() {
@java.lang.Override
public MyServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
return new MyServiceStub(channel, callOptions);
}
};
return MyServiceStub.newStub(factory, channel);
}
public static MyServiceBlockingStub newBlockingStub(
io.grpc.Channel channel) {
io.grpc.stub.AbstractStub.StubFactory<MyServiceBlockingStub> factory =
new io.grpc.stub.AbstractStub.StubFactory<MyServiceBlockingStub>() {
@java.lang.Override
public MyServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
return new MyServiceBlockingStub(channel, callOptions);
}
};
return MyServiceBlockingStub.newStub(factory, channel);
}
public static MyServiceFutureStub newFutureStub(
io.grpc.Channel channel) {
io.grpc.stub.AbstractStub.StubFactory<MyServiceFutureStub> factory =
new io.grpc.stub.AbstractStub.StubFactory<MyServiceFutureStub>() {
@java.lang.Override
public MyServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
return new MyServiceFutureStub(channel, callOptions);
}
};
return MyServiceFutureStub.newStub(factory, channel);
}
同步与异步存根对通信没有影响。 grpc-java 中的存根是 Channel API 顶部的一个小垫片,存根的不同之处在于它们是不同的 API。只需选择与您希望接收响应的方式最匹配的存根类型。如果您喜欢异步 API,请使用异步 API;如果您喜欢 Future API,请使用 Future API;如果您喜欢同步,请使用同步。
在 gRPC java 实现中,ListenableFuture 风格的存根和异步存根有什么区别?
异步通信使用哪个?
public static MyServiceStub newStub(io.grpc.Channel channel) {
io.grpc.stub.AbstractStub.StubFactory<MyServiceStub> factory =
new io.grpc.stub.AbstractStub.StubFactory<MyServiceStub>() {
@java.lang.Override
public MyServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
return new MyServiceStub(channel, callOptions);
}
};
return MyServiceStub.newStub(factory, channel);
}
public static MyServiceBlockingStub newBlockingStub(
io.grpc.Channel channel) {
io.grpc.stub.AbstractStub.StubFactory<MyServiceBlockingStub> factory =
new io.grpc.stub.AbstractStub.StubFactory<MyServiceBlockingStub>() {
@java.lang.Override
public MyServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
return new MyServiceBlockingStub(channel, callOptions);
}
};
return MyServiceBlockingStub.newStub(factory, channel);
}
public static MyServiceFutureStub newFutureStub(
io.grpc.Channel channel) {
io.grpc.stub.AbstractStub.StubFactory<MyServiceFutureStub> factory =
new io.grpc.stub.AbstractStub.StubFactory<MyServiceFutureStub>() {
@java.lang.Override
public MyServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
return new MyServiceFutureStub(channel, callOptions);
}
};
return MyServiceFutureStub.newStub(factory, channel);
}
同步与异步存根对通信没有影响。 grpc-java 中的存根是 Channel API 顶部的一个小垫片,存根的不同之处在于它们是不同的 API。只需选择与您希望接收响应的方式最匹配的存根类型。如果您喜欢异步 API,请使用异步 API;如果您喜欢 Future API,请使用 Future API;如果您喜欢同步,请使用同步。