2
我正在實施一個簡單的grpc服務發現。我想要做的一件事是跟蹤當前服務的客戶數量,服務會將其報告給服務註冊中心。 grpc服務器API會提供這樣的信息嗎?我在這裏遇到了一個類似的問題。 https://github.com/grpc/grpc-java/issues/779。grpc活動客戶端/頻道數
在響應的第1點,有人提到通過流API跟蹤所有傳入的rpc。我到底該怎麼做?
以下是我想要實現的rpc示例,RegisterInstance將充當「pinger」,服務器將使用etcd的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'。 –