GETJOB
优质
小牛编辑
140浏览
2023-12-01
GETJOB [TIMEOUT <ms-timeout>] [COUNT <count>] FROM queue1 queue2 ... queueN
从给定的队列里面取出可用的任务, 或者在超时时间达到时, 返回 NULL
。
在默认情况下, 命令每次最多只会返回一个任务, 但使用 COUNT count
选项可以指定每次最多可以获取的任务数量。
任务会以数组的形式被返回, 每个任务由三个元素组成:
- 任务所在的队列。
- 任务的 ID 。
- 任务的内容。
如果用户给定了多个队列, 那么命令将按照队列被给定的顺序, 从左到右地对它们进行处理。
如果给定的队列没有任务可以返回, 那么执行命令的客户端将被阻塞, 执行命令的节点会与其他节点进行消息交换, 以便将可能存在的任务移动到这个节点里面, 从而尽快地将任务返回给被阻塞的客户端。
disque> ADDJOB greeting "hello world!" 0 -- 将三个任务放进队列里面 DI216f7fa17693623ffb3bd8b0902e134f4ab6a5d305a0SQ disque> ADDJOB greeting "good morning!" 0 DI216f7fa16a8e4a7428b18c2b0ec180963795b0b705a0SQ disque> ADDJOB greeting "bye bye~" 0 DI216f7fa11413878f376588c85aca7c7fa22232f905a0SQ disque> GETJOB FROM greeting -- 依次地从队列里面取出三个任务 1) 1) "greeting" -- 任务来自 "greeting" 队列 2) "DI216f7fa17693623ffb3bd8b0902e134f4ab6a5d305a0SQ" -- 任务的 ID 3) "hello world!" -- 任务的内容 disque> GETJOB FROM greeting 1) 1) "greeting" 2) "DI216f7fa16a8e4a7428b18c2b0ec180963795b0b705a0SQ" 3) "good morning!" disque> GETJOB FROM greeting 1) 1) "greeting" 2) "DI216f7fa11413878f376588c85aca7c7fa22232f905a0SQ" 3) "bye bye~" disque> GETJOB TIMEOUT 5000 FROM greeting -- 命令在等待 5000 毫秒之后返回 (nil) -- 未取得任何任务 (5.09s)
以下是使用 COUNT
选项一次返回多个任务的示例:
disque> ADDJOB todo "finish homework" 0 DIb47e59860656f0cfccc59f79e468b5ef4516d6a605a0SQ disque> ADDJOB todo "buy some milk" 0 DIb47e5986173aae4f703877e1f4afedade0ca82b205a0SQ disque> ADDJOB todo "watch movie" 0 DIb47e59866f34f9a38b868c28fe305baa9c1f688105a0SQ disque> GETJOB COUNT 3 FROM todo -- 一次返回三个任务 1) 1) "todo" -- 第一项任务 2) "DIb47e59860656f0cfccc59f79e468b5ef4516d6a605a0SQ" 3) "finish homework" 2) 1) "todo" -- 第二项任务 2) "DIb47e5986173aae4f703877e1f4afedade0ca82b205a0SQ" 3) "buy some milk" 3) 1) "todo" -- 第三项任务 2) "DIb47e59866f34f9a38b868c28fe305baa9c1f688105a0SQ" 3) "watch movie"