apalis를 사용하여 Rust에서 cron 작업을 예약하고 실행하는 방법
시작하려면 다음을 수행해야 합니다.
새 프로젝트 설정
cargo new my-cron-scheduler
cd my-cron-scheduler
Cargo.toml에 추가
[dependencies]
apalis = { version = "0.3", features = ["cron"] }
serde = { version = "1.0", features = ["derive"] }
tower = 0.4
이 자습서에서는 일일 알림 예제를 만듭니다.
use apalis::prelude::*;
use serde::{Serialize,Deserialize};
#[derive(Serialize, Deserialize, Default, Debug, Clone)]
struct Reminder;
// Define an apalis job
impl Job for Reminder {
const NAME: &'static str = "reminder::DailyReminder";
}
// Define a handler
async fn send_reminder(job: Reminder, ctx: JobContext) {
// Do reminder stuff
}
진입점을 정의하겠습니다.
use apalis::cron::{CronWorker, Schedule};
#[tokio::main]
async fn main() {
// any valid cron string that points to the future should work
let schedule = Schedule::from_str("@daily").unwrap();
let worker = CronWorker::new(schedule, job_fn(send_reminder));
Monitor::new()
.register(worker)
.run()
.await
.unwrap();
}
이것은 완벽하게 작동하지만 작업 컨텍스트에 대한 재시도 및 확장과 같은 기능을 더 추가할 수 있습니다.
apalis
에서 이러한 기능을 사용하려면 retry
및 extension
기능을 포함해야 합니다.use apalis::layers::{Extension, DefaultRetryPolicy, RetryLayer};
#[derive(Clone)]
struct FakeService;
let service = ServiceBuilder::new()
// Will retry 25 times
.layer(RetryLayer::new(DefaultRetryPolicy))
.layer(Extension(FakeService))
.service(job_fn(send_reminder));
let worker = CronWorker::new(schedule, service);
Monitor::new()
.register(worker)
.run()
.await
.unwrap();
이제 핸들러에서
FakeService
에 액세스할 수 있습니다.// Define a handler
async fn send_reminder(job: Reminder, ctx: JobContext) {
let fake_service = ctx.data_opt::<FakeService>();
// fake_service.fetch_from_db()
}
다른 cron 작업에 대해 프로세스를 반복할 수 있습니다.
Monitor::new()
.register(daily_worker)
.register(weekly_worker)
.run()
.await
.unwrap();
추가 정보:
Background job processing with rust using apalis, actix and redis
Apalis on Github
Reference
이 문제에 관하여(apalis를 사용하여 Rust에서 cron 작업을 예약하고 실행하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/njugunamureithi/how-to-schedule-and-run-cron-jobs-in-rust-5106텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)