Я пытаюсь получить доступ к имени метода service/Method
из обработчика gRPC. Кажется, я не могу найти эти данные на объекте grpc.ServicerContext
(и я почти уверен, что их там нет). Следующей моей мыслью было использовать перехватчик, поскольку имя метода предоставляется через grpc.HandlerCallDetails
. Проблема в том, что нет очевидного способа передать это базовому обработчику.
К сожалению, у grpc.HandlerCallDetails
нет конструктора, поэтому мы не можем взять имя метода и засунуть его в метаданные, чтобы оно было прочитано в обработчике. Нам нужно будет создать именованный кортеж с тем же интерфейсом, что и grpc.HandlerCallDetails
, и добавить к нему новое значение метаданных.
Было бы здорово, если бы кто-нибудь столкнулся с этим и нашел решение, или если у кого-то из команды grpc есть обходной путь.
Кроме того, это, вероятно, должно быть что-то более простое, поскольку для такого рода функций уже существует уровень техники. grpc-go
имеет имя Method
, чтобы помочь с этим https://pkg.go.dev/google.golang.org/grpc?tab=doc#Method. Похоже, что в C ++ вы потенциально можете вытащить это из контекста переписи.