成功最有效的方法就是向有经验的人学习!

队列优先级

本页面将说明如何配置asynq后台处理优先级以满足您的需求。

加权优先级

默认情况下,Server将创建一个名为”default”的队列来处理所有任务。

如果您需要为每个任务分配优先级,可以创建具有不同优先级级别的多个队列。

示例:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 6,
        "default":  3,
        "low":      1,
    },
})

这将创建一个具有三个队列的Background实例:criticaldefaultlow。与队列名称关联的数字是队列的优先级级别。

根据以上配置:

  • critical队列中的任务将60%的时间进行处理
  • default队列中的任务将30%的时间进行处理
  • low队列中的任务将10%的时间进行处理

既然我们有了具有不同优先级级别的多个队列,我们可以在调度任务时指定使用哪个队列。

示例:

client := asynq.NewClient(redis)
task := asynq.NewTask("send_notification", map[string]interface{}{"user_id": 42})

// 使用`asynq.Queue`选项指定一个任务使用"critical"队列。
err := client.Enqueue(task, asynq.Queue("critical"))

// 默认情况下,任务将入队到"default"队列。
err = client.Enqueue(task)

通过asynq stats命令,我们可以检查队列。
file

您可以在输出的”QUEUES”部分中查看每个队列中的任务数量。

严格优先级

如果您需要创建多个队列,并且需要将一个队列中的所有任务优先处理,您可以使用StrictPriority选项。

示例:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 3,
        "default":  2,
        "low":      1,
    },
    StrictPriority: true, // 严格模式!
})

这将创建一个具有严格优先级的三个队列的Background实例:criticaldefaultlow。在严格优先级模式下,具有更高优先级的队列始终先处理,只有在所有其他优先级更高的队列为空时,才会处理优先级较低的队列。

因此,在此示例中,始终首先处理critical队列中的任务。如果critical队列为空,则处理default队列。如果critical和default队列都为空,则处理low队列。

赞(0) 打赏
未经允许不得转载:竹影清风阁 » 队列优先级
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册