1 个不稳定版本
0.1.0 | 2023年11月30日 |
---|
#11 in #volo
360KB
81 行代码
该软件包实现了基于 Volo 的服务的并发限制器层。
注意
如果服务调用过程中不包含任何异步操作,此软件包中的限制器可能无法限制。这可能会发生在一些纯计算服务器和缓存服务器上。
原因在于,如果没有异步操作,请求的处理过程(服务的 call
方法)变成“原子的”,每个工作线程将不会开始处理新的请求,直到当前请求完成。基于这种情况,可能的最高并发数是工作线程的数量(通常等于逻辑 CPU 线程的数量),可能永远达不到配置的限制。
快速入门
Volo gRPC 服务器
将所需的依赖项添加到 Cargo.toml
文件中
[dependencies]
# -- snip --
volo-concurrency-limiter = { version = "*", features = ["volo-grpc"] }
# -- snip --
将中间件层添加到服务器,如下所示
use std::net::SocketAddr;
use volo_grpc::server::{Server, ServiceBuilder};
use volo_example::S;
use volo_concurrency_limiter::ConcurrencyLimiterServiceLayer;
#[volo::main]
async fn main() {
let addr: SocketAddr = "[::]:8080".parse().unwrap();
let addr = volo::net::Address::from(addr);
Server::new()
.add_service(ServiceBuilder::new(volo_gen::volo::example::ItemServiceServer::new(S)).build())
.layer_front(ConcurrencyLimiterServiceLayer::new(100)) // which configures the max concurrency to be 100
.run(addr)
.await
.unwrap();
}
Volo Thrift 服务器
将所需的依赖项添加到 Cargo.toml
文件中
[dependencies]
# -- snip --
volo-concurrency-limiter = { version = "*", features = ["volo-thrift"] }
# -- snip --
将中间件层添加到服务器,如下所示
use std::net::SocketAddr;
use volo_example::{S};
use volo_concurrency_limiter::ConcurrencyLimiterServiceLayer;
#[volo::main]
async fn main() {
let addr: SocketAddr = "[::]:8080".parse().unwrap();
let addr = volo::net::Address::from(addr);
volo_gen::volo::example::ItemServiceServer::new(S)
.layer_front(ConcurrencyLimiterServiceLayer::new(10))
.run(addr)
.await
.unwrap();
}
许可协议
Volo 采用了 MIT 许可证和 Apache 许可证(版本 2.0)的双重许可。
有关详细信息,请参阅 LICENSE-MIT 和 LICENSE-APACHE。
社区
-
电子邮件: [email protected]
-
如何成为成员: 社区成员资格
-
问题: 问题
依赖项
~10–21MB
~279K SLoC