Потоковые ответы от службы gRPC к клиенту REST - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь написать службы, использующие как gRPC, так и REST. Технологии реализации: Java, Spring Boot и gRPC. Ниже приведен пример сценария использования:

Usage diagram

Предполагается, что существуют внешние клиенты, которые могут взаимодействовать с приложением через конечные точки REST и / или путем создания gRPCзвонки. Внутренне существуют службы «шлюза», которые предоставляют внешние интерфейсы и заботятся о транспортировке / маршрутизации запросов и ответов между внешними клиентами и службами «домена», которые выполняют фактическую работу. Внутренние службы будут взаимодействовать через gRPC.

Внешний клиент не знает, как все обрабатывается внутренне, а доменные службы не имеют внешних интерфейсов.

Мне удалось получить базовый запрос/ шаблон ответа для сквозной работы, но я не уверен, как реализовать шаблоны, которые включают потоковую передачу (в любом направлении). На самом деле, это не совсем так - я смог получить базовые примеры, представленные на сайте gRPC (https://grpc.io/) для работы.

Вот пример того, что я пытаюсь сделать,что я не могу понять, как заставить работать:

Служба «домен» имеет возможность возвращать коллекцию объектов (то есть источник потока) запрашивающей стороне. Домен использует логику gRPC дляпредоставить эти объекты вызывающему клиенту (в данном случае «шлюзу»). Внешний клиент выполняет REST-вызов к службе шлюза, чтобы запросить коллекцию объектов, предоставляемую службой домена.

Насколько я могускажем, домен и шлюз общаются друг с другом просто отлично, но есть проблема, когда он пытается отправить информацию обратно внешнему клиенту. Для получения более подробной информации о коде и ошибках, с которыми я столкнулся, пожалуйста, смотрите связанныеПроблема Проблема возврата потока ответов от службы gRPC клиенту RESTful .

Один вопрос, который приходит на ум:можно ли использовать REST для обработки потоковой информации (в любом направлении)? Если нет, какие варианты у меня есть, если есть? Если это возможно, как мне это сделать?

ОБНОВЛЕНИЕ :

Я сделал обновления для упомянутого сопутствующего сообщения СО, размещенного выше.

1 Ответ

0 голосов
/ 03 октября 2019

вы можете попробовать StreamingResponseBody (https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/servlet/mvc/method/annotation/StreamingResponseBody.html), позволяет записывать в выходной поток без блокировки основного потока.

...