Kyu

Kyu 是一个极其简单的、持久化的队列系统。

要求

安装

Swift 包管理器

dependencies: [
    .package(url: "https://github.com/reddavis/Kyu", from: "3.0.0-beta.1")
]

用法

Kyu 由两部分组成;Kyu 负责管理任务状态和执行,而 Job 负责执行实际工作。

Job

一个 Job 必须简单地遵循 JobCodable 协议。

一个简单的 “在文件末尾添加新行” 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

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)