我有一个 Vapor 应用程序,我想要完成的是 - 在应用程序启动时,我想运行一个异步作业或某种可以清除并重新分派一些已分派作业的异步操作。我想在应用程序启动时执行此操作,以防应用程序因维护或迁移而关闭。
我想我可以创建一个预定的作业,并将其安排在不久之后或其他时间,但这是最好的方法吗?
最简单的方法是在
configure.swift
中调度作业,但首先添加作业的定义并启动队列:
import Fluent
import Queues
app.queues.use(.fluent())
app.queues.add(OnBootJob())
try app.queues.startInProcessJobs(on: .default)
app.queues.queue.dispatch(OnBootJob.self, .init(something: "blah"))
这是一个骨架工作:
struct OnBootPayload: Codable {
let something: String
}
struct OnWeeklyDemandJob: AsyncJob {
typealias Payload = OnBootPayload
func dequeue(_ context: QueueContext, _ payload: Payload) async throws {
context.application.db.logger.notice("onBoot started")
// The real work gets done here
}
}
我的印象是 Redis 在 Vapor 社区中是首选,但我使用 Fluent。它第一次对我有用,这似乎是继续使用它的充分理由!