【发布时间】:2020-07-16 00:59:33
【问题描述】:
我正在寻找一种以高粒度分别对 RPC 进行速率限制的方法,但令我沮丧的是,对于这个问题没有太多可用的选项。我正在尝试用 gRPC 替换 REST API,对我来说最重要的功能之一是能够为每个路由添加中间件。不幸的是,go-grpc-middleware 仅将中间件应用于整个服务器。
在我的想象中,一个理想的 gRPC 限速中间件会使用与 go-proto-validators 类似的技巧,其中 proto 文件将包含限速本身的配置。
【问题讨论】:
-
您是否考虑过实现自己的server interceptor?
go-grpc-middleware建立在拦截器之上。实现您自己的可以让您根据请求信息指定速率限制。 -
有趣的想法,但是我不确定是否有办法区分通过拦截器调用哪个 RPC。不过看起来很有希望。
-
想出了一些应该使速率限制成为可能的东西,UnaryServerInfo.FullMethod 似乎为 RPC 显示了一个非常独特的标识符
-
如果需要,您还应该能够检查
req参数以找出更具体的信息。