Должен ли я создать новый контекст для служебного вызова нисходящего направления или просто передать восходящий? - PullRequest
0 голосов
/ 13 июня 2018

Процесс такой: для каждого входящего HTTP-запроса у меня есть ранний общий обработчик, который создает контекст для запроса, также есть некоторые другие общие обработчики, которые будут выполнять некоторые операции предварительной обработки / синтаксического анализа, а затем помещать некоторыеданные в контексте для будущего использования, в конечном итоге вызовут один нисходящий API grpc.

Теперь я не могу думать об этом:

  1. Я просто передаю созданный контекстиз-за раннего общего обработчика вызова API grpc проблема заключается в том, что нижестоящему API не нужны те данные, которые я ранее поместил в контекст, поэтому я планирую использовать API WithValue(parent Context, key, val interface{}) Context, чтобы установить их все на nil, прежде чемвызов grpc;

  2. Я создаю совершенно новый контекст outgoingCtx := metadata.NewOutgoingContext(context.Background(), md), затем в раннем контексте ctx.Done() Я вызвал Cancel() для этого outgoingCtx;

Какой вариант лучше, или он действительно не имеет никакого значения, даже для случая с высоким уровнем параллелизма?

1 Ответ

0 голосов
/ 13 июня 2018

Значения контекста не переносятся через границы сети.Это невозможно, поскольку невозможно получить список всех значений из контекста, не зная всех ключей.

То, что перевозится , является сигналом отмены.То есть, если клиент вашего сервиса сдается до завершения RPC, вышестоящие сервисы также могут остановить свою работу.Является ли это желательным или нет, зависит от конкретного случая: вы можете не хотеть отменять отправку электронной почты после того, как регистрация уже завершена, но обычно вполне нормально отменить операции только для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...