44个版本
0.8.4 | 2024年4月9日 |
---|---|
0.8.3 | 2023年10月19日 |
0.8.2 | 2023年8月29日 |
0.8.1 | 2023年1月21日 |
0.3.0 | 2019年11月30日 |
#180 在 异步
每月 35,137 次下载
用于 40 个crate (30个直接使用)
48KB
915 行
Mobc
支持异步/await的通用连接池。
灵感来自Deadpool、Sqlx、r2d2和Golang SQL包。
注意:mobc需要至少Rust 1.60。
用法
[dependencies]
mobc = "0.8"
# For async-std runtime
# mobc = { version = "0.8", features = ["async-std"] }
# For actix-rt 1.0
# mobc = { version = "0.8", features = ["actix-rt"] }
特性
- 支持异步/.await语法
- 同时支持
tokio
和async-std
- 支持Tokio指标
- 生产环境中经过战斗测试
- 高性能
- 易于定制
- 动态配置
适配器
后端 | 适配器crate |
---|---|
bolt-client | mobc-bolt |
tokio-postgres | mobc-postgres |
redis | mobc-redis |
arangodb | mobc-arangors |
lapin | mobc-lapin |
reql | mobc-reql |
redis-cluster | mobc-redis-cluster |
欢迎提供更多数据库适配器。
示例
更多 示例
使用一个假想的"foodb"数据库。
use mobc::{async_trait, Manager};
#[derive(Debug)]
pub struct FooError;
pub struct FooConnection;
impl FooConnection {
pub async fn query(&self) -> String {
"PONG".to_string()
}
}
pub struct FooManager;
#[async_trait]
impl Manager for FooManager {
type Connection = FooConnection;
type Error = FooError;
async fn connect(&self) -> Result<Self::Connection, Self::Error> {
Ok(FooConnection)
}
async fn check(&self, conn: Self::Connection) -> Result<Self::Connection, Self::Error> {
Ok(conn)
}
}
配置
max_open
设置池管理的最大连接数。
0表示无限,默认为10。
min_idle
设置池维护的最大空闲连接数。池将在任何时候最多维护这么多空闲连接,同时尊重max_open的值。
max_lifetime
设置池中连接的最大生命周期。过期的连接在重新使用之前可能会被懒加载关闭。
None表示永远重用,默认为None。
get_timeout
设置池使用的获取超时。Pool::get调用将等待这么长时间以等待连接可用,然后返回错误。
None表示永不超时,默认为30秒。
变量
一些连接池配置可以动态调整。每个连接池实例具有以下方法:
- set_max_open_conns
- set_max_idle_conns
- set_conn_max_lifetime
Stats
- max_open - 数据库的最大打开连接数。
- connections - 已建立连接的数量,包括正在使用和空闲的。
- in_use - 当前正在使用的连接数。
- idle - 空闲连接数。
- wait_count - 等待连接的总数。
- wait_duration - 等待新连接的总阻塞时间。
- max_idle_closed - 由于max_idle而关闭的总连接数。
- max_lifetime_closed - 由于max_lifetime而关闭的总连接数。
Metrics
- Counters
mobc_pool_connections_opened_total
- 打开的连接池连接总数mobc_pool_connections_closed_total
- 关闭的连接池连接总数
- Gauges
mobc_pool_connections_open
- 当前打开的连接池连接数mobc_pool_connections_busy
- 当前忙碌的连接池连接数(执行数据库查询)mobc_pool_connections_idle
- 当前未使用的连接池连接数(等待下一次池查询运行)mobc_client_queries_wait
- 当前等待连接的查询数
- Histograms
mobc_client_queries_wait_histogram_ms
- 所有查询等待时间的直方图(毫秒)
Compatibility
由于tokio与其他运行时(如async-std)不兼容,因此使用tokio编写的数据库驱动程序不能在async-std运行时中运行。例如,由于使用tokio,因此不能在tide中使用redis-rs,因此基于redis-res的连接池也不能在tide中使用。
Dependencies
~5–19MB
~205K SLoC