Как продолжить поток, если клиент перезапущен в потоковой передаче на стороне сервера GRPC?

#java #stream #grpc #server-side #stub

#java #поток #grpc #на стороне сервера #заглушка

Вопрос:

     @Override
    public void response(RequestApp request, Grpc.Stub asyncStub) {

        StreamObserver<Dto> streamObserver = new StreamObserver<Dto>() {
            @Override
            public void onNext(Response response) {
                LOGGER.info("Response is received.");
            }

            @Override
            public void onError(Throwable thrwbl) {
                LOGGER.error("Get error.");
            }

            @Override
            public void onCompleted() {
                LOGGER.info("Stream is completed.");
            }
        };

        asyncStub.method(request, streamObserver);
}
  

Код клиента Grpc похож на приведенный выше. Здесь есть потоковая передача на стороне сервера. Если клиент перезапущен, после запуска потока на стороне сервера, как продолжить этот поток?

Ответ №1:

Вы не можете возобновить текущий поток, если соединение потеряно по какой-либо причине. Если вы хотите, чтобы сервер начал отправлять данные с предыдущей точки в потоке данных, вы можете попросить клиента включить токен в запрос, который сервер может использовать в качестве указания, с чего начать.