探索高效能的分布式任务队列:SwiftQ

探索高效能的分布式任务队列:SwiftQ

项目地址:https://gitcode.com/John-Connolly/SwiftQ

SwiftQ Logo

SwiftQ 是一款专为服务器端Swift应用程序设计的分布式任务队列。它利用消息传递机制,通过Redis作为消息代理,实现了可靠的分布式任务处理。这款强大的工具允许您在多机器环境中分配工作负载,确保即使在网络问题或消费者故障的情况下也能完成所有任务。

项目简介

SwiftQ的核心是其基于可靠队列模式的设计,保证了任务的至少一次交付。它可以实现实时操作和延迟执行任务,并且可以由多个生产者和消费者构成,以实现高可用性和水平扩展。它特别适合那些超出了常规HTTP请求响应周期的任务。

应用场景

SwiftQ适用于各种后台任务,包括但不限于:

  • 发送邮件
  • 记录指标
  • 删除/停用数据
  • 与第三方API交互
  • 批量数据库插入的分时处理
  • 图像处理
  • 创建缩略图
  • 任何耗时超过200毫秒的操作

主要特性

  • 任务调度
  • 定期任务
  • 任务链式调用
  • 任务依赖注入
  • 失败重试策略
  • 至少一次交付保证

配置

配置SwiftQ需要设定Redis连接参数,例如数据库ID、主机名和端口。此外,还需要设置轮询间隔、是否启用任务调度、并发数等。默认配置如下:

let redisConfig = RedisConfig(redisDB: 0, hostname: "127.0.0.1", port: 6379, password: nil)
let configuration = Configuration(pollingInterval: 1000, 
                                  enableScheduling: true,
                                  concurrency: 4,
                                  redisConfig: .development,
                                  tasks: [EmailTask.self])

使用方法

  • 生产者(Producer): 创建并推送任务到队列。
let producer = try SwiftQProducer(redisConfig: .development)
let demoTask = DemoTask()
try producer.enqueue(demoTask)
  • 消费者(Consumer): 开始接收和处理任务。
let consumer = try SwiftQConsumer(configuration)
consumer.start()
  • 创建任务: 每个任务都需遵循Task协议,包括存储属性以便SwiftQ保存额外信息。任务自动符合Codable协议,如有自定义编码逻辑,可添加func encode(to encoder: Encoder) throws
final class EmailTask: Task {
    let storage: Storage
    let email: String
    
    init(email: String) {
        self.storage = Storage(EmailTask.self)
        self.email = email
    }
    
    func execute() throws {}
}

进阶使用

  • 定时任务: 可以设定任务在特定时间执行。
try producer.enqueue(task: demo, time: .seconds(30))
  • 定期任务: 如每天固定时间执行的任务,用于定时采集数据等。
final class PollTask: PeriodicTask {
    let storage: Storage
    let url: String
    
    init(url: String) {
        self.storage = Storage(PollTask.self)
        self.url = url
    }
    
    func execute() throws {}
    
    var frequency: PeriodicTime {
        return .daily(minute: 30, hour: 5)
    }
}
  • 自定义队列: 可以指定任务仅在特定队列中运行,供特定消费者消费。

支持的数据类型

SwiftQ支持的原始JSON表示类型包括字符串、数字、数组和布尔值。

安装

只需在Package.swift文件中添加以下依赖:

.Package(url: "https://github.com/John-Connolly/SwiftQ.git", majorVersion: 0)

总的来说,SwiftQ是一个强大而灵活的工具,为您的服务器端Swift应用提供了出色的后台任务管理能力。无论是简单的邮件发送还是复杂的图像处理,它都能胜任,是值得信赖的后端助手。快来试试看吧!

项目地址:https://gitcode.com/John-Connolly/SwiftQ

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gitblog_00028

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值