Долгоживущие звонки GRP C - PullRequest
0 голосов
/ 18 апреля 2020

Мне хотелось бы узнать, как лучше всего выполнять долгоживущие вызовы GRP C.

У меня типичный клиент -> Вызов сервера (оба golang), и обработка на сервере может занимать до 20 -30 секунд до завершения. Мне нужно, чтобы клиент дождался его завершения, прежде чем я продолжу. Опции, которые я вижу (и я не люблю ни одного из них):

  1. Установите время ожидания на абсурдную продолжительность (например, 1 мин) и просто подождите. Это похоже на хак, и я также ожидаю, что в моем сервисе я столкнусь со странным поведением sh с такими вещами.
  2. Используйте поток - мне все еще нужно сделать вариант 1 здесь, и это действительно мне не очень помогает, так как мой ответ на самом деле просто унарный, а поток мне не очень помогает обработки asyn c и мой исходный вызов GRP C возвращает идентификатор транзакции, который хранится в Redis и содержит состояние транзакции. Я создал другую конечную точку GRP C для опроса статуса транзакции в al oop.
  3. Очередь или Поток (например, Kafka Stream) - настройте клиент для прослушивания чего-то вроде топологии Kafka c и мой сервер уведомит (Queue || Stream), когда это будет сделано, чтобы мой клиент поднял его. Я думал, что это сработает, но мне показалось, что он слишком перегорел.

Вариант №3 работает для меня, но, конечно, чувствует себя довольно грязно. Я также на 100% зависим от Redis. Учитывая, что GRP C построен на HTTP2, я бы подумал, что, возможно, есть какая-то опция Server Pu sh, но я ее не нахожу.

Боюсь, что я упускаю простой способ справиться с этой проблемой.

Спасибо

...