在Gearman服务器上能清空作业队列吗

10 投票
3 回答
12603 浏览
提问于 2025-04-16 08:54

在Gearman服务器上,有办法清空一个工作队列吗?我正在使用Gearman的Python驱动,但文档里没有关于清空队列的任何信息。我想这个功能应该是存在的,可能需要直接连接到Gearman服务器才能实现。

3 个回答

6

可以通过telnet连接的管理协议(搜索“管理协议”)发现,它并没有提供一个可以清空队列的命令,只有一个关闭命令。

如果你想避免系统停机,可以写一个通用的“任务消费者”工作程序,用来清空队列。我已经设置了一个脚本,它接受一系列任务名称,然后就静静地等待并处理这些任务。

像这样:

# generic_consumer.py job1 job2 job3

你可以使用管理协议中的status命令来获取队列中函数名称和数量的列表。管理协议的文档会告诉你响应的格式。

# (echo status ; sleep 0.1) | netcat 127.0.0.1 4730
14

我看到了一种方法,链接在这里:这个方法

这个命令是:/usr/bin/gearman -t 1000 -n -w -f function_name > /dev/null

简单来说,这个命令会把所有的任务都丢到一个叫做/dev/null的地方。

5

根据我从文档中了解到的内容,以及使用PHP和gearman的经验,清空任务队列的唯一方法就是重启gearmand任务服务器。如果你使用的是持久化的任务队列,那么你还需要清空你用作持久存储的地方。如果这个存储是数据库的话,你就需要把相关表中的所有数据都删除掉。

步骤是:停止gearmand --> 清空表中的数据 --> 启动gearmand

希望这样解释够清楚。

撰写回答