asynq队列如何配置队列优先级


前言

公司上线asynq队列服务已经有两个月了,用得一直很好,比较稳定,目前只用了三台服务器跑任务,任务类型随着业务不断的切到asynq上,队列上的任务类型也越来越多,考虑把一些重要的任务的优先级提高一下,研究一下官方文档,看如何为不同的任务类型配置asynq的任务优先级


一、Asynq是什么?

Asynq是一个go语言实现的分布式任务队列和异步处理库,在这里如果有不了解的同学强烈推荐用一用,用了之后我相信你肯定会喜欢上这个产品,用go语言开发,轻量,稳定,功能强大,易用,分布式,你想要的功能它都有。

在这里插入图片描述
如果还不了解了请移步可以看一下原来发布的asynq安装教程

高性能分布式任务队列Asynq安装和使用实战

二、Asynq队列优先级

本步骤说明如何配置异步后台处理以满足您的需求。

1、加权优先级

默认情况下,Asynq Server 将创建一个名为“default”的队列来处理您的所有任务。
如果需要为每个任务分配优先级,可以创建多个具有不同优先级的队列。
例子:

代码如下(示例):

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

Asynq将创建一个具有三个队列的 Background 实例:critical、default 和 low。 与队列名称关联的数字是队列的优先级。

使用上述配置:

关键队列中的任务将被处理 60% 的时间
默认队列中的任务将被处理 30% 的时间
低队列中的任务将被处理 10% 的时间
现在我们有多个具有不同优先级的队列,我们可以指定在调度任务时使用哪个队列。

代码如下(示例):

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

// Specify a task to use "critical" queue using `asynq.Queue` option.
err := client.Enqueue(task, asynq.Queue("critical"))

// By default, task will be enqueued to "default" queue.
err = client.Enqueue(task)

我们可以使用 asynq stats 命令检查队列。

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

2、开启严格优先

如果您需要创建多个队列并且有严格的优先顺序,则可以使用 StrictPriority 选项。
代码如下(示例):

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]uint{
        "critical": 3,
        "default":  2,
        "low":      1,
    },
    StrictPriority: true, // strict mode!
})

这将创建一个具有三个队列的后台实例:关键critical、默认default和低优先级low。 在严格优先级模式下,总是先处理优先级高的队列,只有当所有其他优先级高的队列都为空时,才会处理优先级低的队列。

所以在这个例子中,关键队列critical中的任务总是首先被处理。 如果关键队列为空,则处理默认队列default。 如果关键队列和默认队列都为空,则处理低队列low。


总结

asynq队列队列优先级配置让我们可以安照业务的实际优先级把不同的任务放入不同的队列,解决了队列有优先级要求的场景。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

北漂燕郊杨哥

您的支持是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值