【问题标题】:grpc number of active clients/channelsgrpc 活跃客户端/通道数
【发布时间】:2016-12-24 08:06:57
【问题描述】:

我正在实现一个简单的 grpc 服务发现。我想做的一件事是跟踪服务当前有多少客户端,服务会将其报告给服务注册表。 grpc server api 是否提供此类信息?我在这里遇到了一个有点类似的问题。 https://github.com/grpc/grpc-java/issues/779.

在响应的第 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 调用。这样我可以报告例如最后一秒的传入连接数。我想它可以作为工作量的代理。

【问题讨论】:

    标签: grpc


    【解决方案1】:

    ServerBuilder 有一个addTransportFilter(),它允许您安装一个ServerTransportFilter,在创建和终止连接(即传输)时您会收到通知。

    【讨论】:

    • 此功能在所有语言中的可用性如何?无论如何,对于不同的语言来说,这样做的方式似乎是不一样的。它是否为每个连接或每个 rpc 调用提供通知?例如,在 python 中,add_generic_rpc_handlers 和 golang 中的 UnaryInterceptor 可以为每个 rpc 调用而不是每个连接提供通知。
    • 不确定其他语言。每个连接都会通知 Java 的 ServerTransportFilter
    猜你喜欢
    • 1970-01-01
    • 2020-06-03
    • 2018-07-27
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多