主题
后台服务
Pingora 支持 后台服务(Background Service),用于执行长期运行的任务,如监控、日志收集和定时作业。
特性
- 与主代理服务并行运行
- 使用异步运行时执行任务
- 可与上下文(CTX)和过滤器配合使用
创建后台任务
rust
use tokio::time::{sleep, Duration};
async fn background_task() {
loop {
println!("后台任务运行中...");
sleep(Duration::from_secs(10)).await;
}
}
#[tokio::main]
async fn main() {
tokio::spawn(background_task()); // 启动后台任务
let server = Server::new(None).unwrap();
server.bootstrap();
let app = http_proxy_service(None);
server.run_forever(app).unwrap();
}
tokio::spawn
用于启动独立的异步任务- 后台任务可执行日志记录、数据同步或监控指标更新
定时任务示例
rust
use tokio::time::{interval, Duration};
async fn scheduled_task() {
let mut interval = interval(Duration::from_secs(60));
loop {
interval.tick().await;
println!("每分钟执行一次的任务");
}
}
- 使用
interval
实现周期性执行 - 适合定时健康检查或定期数据处理
与主服务集成
- 后台任务不会阻塞主代理服务
- 可通过 CTX 或共享数据与请求处理逻辑通信
- 支持错误捕获与重试机制,保证任务稳定运行
通过后台服务,Pingora 可以在保持高性能请求处理的同时,运行长期任务,实现监控、日志和定时作业等功能。