Не экспериментальный способ позволить клиенту изящно отменить потоковую услугу - PullRequest
0 голосов
/ 03 октября 2018

Поскольку все классы StreamObserver (CallStreamObserver, ServerCallStreamObserver) помечены как экспериментальные https://github.com/grpc/grpc-java/issues/1788, что является стабильным способом, позволяющим клиенту грациозно отменять потоковую службу, сигнализируя серверу прекратить отправку сообщений?

Кроме того, если я решу использовать эти классы для достижения этой функциональности, могу ли я предположить, что со мной все будет в порядке, если я не обновлю версию grpc-java?

1 Ответ

0 голосов
/ 12 октября 2018

Вы всегда можете позвонить onError() на StreamObserver, возвращенном заглушкой.Для потоковых RPC на сервере, где заглушка не возвращает StreamObserver, вы можете запустить RPC внутри Context.

CancellableContext withCancellation = Context.current().withCancellation();
Context prevCtx = withCancellation.attach();
try {
  stub.foo(request, responseObserver);
} finally {
  withCancellation.detach(prevCtx);
}

Затем закрытие Context отменит RPC:

withCancellation.close();
...