Я реализую простое обнаружение сервиса grpc. Одна из вещей, которые я хотел бы сделать, - это отслеживать, сколько клиентов в настоящее время относится к этой услуге, и служба сообщит об этом в реестр служб. Предоставляет ли сервер grpc api такую информацию? Я столкнулся с несколько похожим вопросом. https://github.com/grpc/grpc-java/issues/779.grpc количество активных клиентов/каналов
В пункте 1 ответа было упомянуто, что отслеживать все входящие rpc с помощью потокового api. Как именно я это делаю?
Вот пример rpc, который я хочу реализовать, RegisterInstance будет действовать как «пингер», а сервер будет использовать ttl и т. Д., Чтобы проверить работоспособность службы. И реестр будет использовать connected_client
, чтобы определить, какой IP-адрес службы будет отправлен обратно клиенту, если в реестре зарегистрировано более одного типа услуг. Моя проблема заключается в том, как я могу получить connected_clients
со стороны службы?
syntax = "proto3";
package registry_grpc;
service ServiceRegistry{
rpc GetInstance(ServiceRequest) returns(ServiceInstance) {}
rpc RegisterInstance(ServiceInstance) returns(ServiceInstance) {}
}
message ServiceRequest{
string service_type = 1;
}
message ServiceInstance{
int32 id = 1;
int32 connected_clients = 2;
string service_type = 3;
string host_address = 4;
int32 port = 5;
}
редактировать
Я обнаружил, что это возможно, чтобы перехватить все входящие вызовы RPC. Таким образом, я могу сообщить, например, количество входящих соединений за последнюю секунду. Я предполагаю, что это может служить прокси для рабочей нагрузки.
Какова доступность этой функции на всех языках? В любом случае, похоже, что это не так для разных языков. Предоставляет ли это уведомление для каждого соединения или для вызова rpc? Например, в python 'add_generic_rpc_handlers' и в golang' UnaryInterceptor' могут выдавать уведомление за вызов rpc, но не за соединение. –
Не уверен, что касается других языков. Java-сервер «ServerTransportFilter» уведомляется о каждом соединении. –