use std::time::Duration;
use cheetah_string::CheetahString;
use rocketmq_remoting::clients::connection_pool::ConnectionPool;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("=== RocketMQ Connection Pool Example ===\n");
println!("Example 1: Create a connection pool");
let pool: ConnectionPool<()> = ConnectionPool::new(
1000, Duration::from_secs(300), );
println!("✓ Connection pool created");
println!(" - Max connections: 1000");
println!(" - Idle timeout: 300s\n");
println!("Example 2: Record connection metrics");
let addr1 = CheetahString::from("127.0.0.1:10911");
let addr2 = CheetahString::from("127.0.0.1:10912");
pool.record_success(&addr1, 10); pool.record_success(&addr1, 15);
pool.record_success(&addr1, 20);
pool.record_error(&addr2);
println!("✓ Recorded metrics for {} connections", 2);
if let Some(metrics) = pool.get_metrics(&addr1) {
println!("\n📊 Metrics for {}:", addr1);
println!(" Request count: {}", metrics.request_count());
println!(" Average latency: {:.2}ms", metrics.avg_latency());
println!(" Error rate: {:.2}%", metrics.error_rate() * 100.0);
}
if let Some(metrics) = pool.get_metrics(&addr2) {
println!("\n📊 Metrics for {}:", addr2);
println!(" Consecutive errors: {}", metrics.consecutive_errors());
}
println!("\nExample 3: Pool-level statistics");
let stats = pool.stats();
println!("📊 Pool Statistics:");
println!(" Total connections: {}", stats.total);
println!(" Healthy connections: {}", stats.healthy);
println!(" Active connections: {}", stats.active());
println!(" Idle connections: {}", stats.idle);
println!(" Max connections: {}", stats.max_connections);
println!(" Utilization: {:.1}%", stats.utilization() * 100.0);
println!(" Total requests: {}", stats.total_requests);
println!(" Total errors: {}", stats.total_errors);
if stats.total_requests > 0 {
println!(" Error rate: {:.2}%", stats.error_rate() * 100.0);
}
println!("\nExample 4: Background cleanup");
let cleanup_task = pool.start_cleanup_task(Duration::from_secs(30));
println!("✓ Cleanup task started");
println!(" - Runs every 30 seconds");
println!(" - Evicts idle connections (>300s)");
println!(" - Removes unhealthy connections");
tokio::time::sleep(Duration::from_millis(100)).await;
cleanup_task.abort();
println!("✓ Cleanup task stopped");
println!("\n=== All examples completed ===");
Ok(())
}