Kyu 是一个极其简单的、持久化的队列系统。
dependencies: [
.package(url: "https://github.com/reddavis/Kyu", from: "3.0.0-beta.1")
]
Kyu 由两部分组成;Kyu 负责管理任务状态和执行,而 Job 负责执行实际工作。
一个 Job 必须简单地遵循 Job 和 Codable 协议。
一个简单的 “在文件末尾添加新行” Job 可能看起来像这样
final class AppendNewLineJob: Job
{
let id: UUID
var maximumNumberOfRetries: Int { 5 }
var numberOfRetries = 0
var executionDate = Date()
let fileURL: URL
let string: String
// MARK: Initialization
init(fileURL: URL, string: String)
{
self.id = UUID()
self.fileURL = fileURL
self.string = string
}
// MARK: Job
func execute() async throws
{
let fileHandle = try FileHandle(forWritingTo: self.fileURL)
try fileHandle.seekToEnd()
fileHandle.write("\(self.string)\n".data(using: .utf8)!)
fileHandle.closeFile()
}
}
Kyu 管理和执行 Job。它接受一个 URL 参数,用于持久化存储 Job。
let url = URL(string: ...)!
self.kyu = try Kyu<AppendNewLineJob>(url: url)
let job = AppendNewLineJob(
fileURL: fileURL,
string: "a string to append"
)
try await kyu.add(job: job)