Crates.io | mobc |
lib.rs | mobc |
version | 0.8.5 |
source | src |
created_at | 2019-10-29 10:51:04.597446 |
updated_at | 2024-10-16 09:23:54.879575 |
description | A generic connection pool with async/await support |
homepage | |
repository | https://github.com/importcjj/mobc |
max_upload_size | |
id | 176617 |
size | 193,699 |
A generic connection pool with async/await support.
Inspired by Deadpool, Sqlx, r2d2 and Golang SQL package.
Note: mobc requires at least 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"] }
tokio
and async-std
Backend | Adaptor 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 |
More DB adaptors are welcome.
More examples
Using an imaginary "foodb" database.
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)
}
}
Sets the maximum number of connections managed by the pool.
0 means unlimited, defaults to 10.
Sets the maximum idle connection count maintained by the pool. The pool will maintain at most this many idle connections at all times, while respecting the value of max_open.
Sets the maximum lifetime of connections in the pool. Expired connections may be closed lazily before reuse.
None meas reuse forever, defaults to None.
Sets the get timeout used by the pool. Calls to Pool::get will wait this long for a connection to become available before returning an error.
None meas never timeout, defaults to 30 seconds.
Some of the connection pool configurations can be adjusted dynamically. Each connection pool instance has the following methods:
mobc_pool_connections_opened_total
- Total number of Pool Connections openedmobc_pool_connections_closed_total
- Total number of Pool Connections closedmobc_pool_connections_open
- Number of currently open Pool Connectionsmobc_pool_connections_busy
- Number of currently busy Pool Connections (executing a database query)"mobc_pool_connections_idle
- Number of currently unused Pool Connections (waiting for the next pool query to run)mobc_client_queries_wait
- Number of queries currently waiting for a connectionmobc_client_queries_wait_histogram_ms
- Histogram of the wait time of all queries in msBecause tokio is not compatible with other runtimes, such as async-std. So a database driver written with tokio cannot run in the async-std runtime. For example, you can't use redis-rs in tide because it uses tokio, so the connection pool which bases on redis-res can't be used in tide either.