标签: gearman

Rabbitmq或Gearman - 选择一个工作队列

在工作中,我们需要构建一个作业服务器,用于发送电子邮件,构建PDF,处理一些数据等.显然,我们希望建立一些通用的排队系统.我熟悉Gearman,这是它试图解决的确切问题:将工作放在工作人员来接他们的队列中.但是,我看到很多关于Rabbitmq的提及,我不清楚它在这种情况下是如何使用的.

Rabbitmq是构建分布式作业系统的好框架吗?

message-queue gearman rabbitmq celery

67
推荐指数
2
解决办法
4万
查看次数

很好地阻止齿轮工人

我有许多Gearman工作人员不断运行,保存用户页面视图记录等内容.偶尔,我会更新Gearman工作人员使用的PHP代码.为了让工作人员切换到新代码,我杀死并重新启动工作人员的PHP进程.

有什么更好的方法呢?据推测,当我杀死其中一个工作进程时,我有时会丢失数据(尽管不是非常重要的数据).

编辑:我找到了一个适合我的答案,并在下面发布.

php gearman

43
推荐指数
3
解决办法
1万
查看次数

自动启动多个upstart实例

我们使用PHP gearman worker并行运行各种任务.一切都运行得很好,我有愚蠢的小shell脚本,当我想要它们时将它们旋转起来.作为一名程序员(因此也是懒惰的),我想看看我是否可以通过一个新手脚本来解决这些问题.

我想出了如何使用实例节,所以我可以使用实例编号启动它们:

description "Async insert workers"
author      "Mike Grunder"

env SCRIPT_PATH="/path/to/my/script"

instance $N

script
    php $SCRIPT_PATH/worker.php
end script
Run Code Online (Sandbox Code Playgroud)

这很好用,就像这样开始它们:

sudo start async-worker N=1
sudo start async-worker N=2
Run Code Online (Sandbox Code Playgroud)

我想要使​​用这些工作者的方法是调整其中的一些(可能每个核心一个等),我想在启动时这样做.要清楚,我不需要upstart脚本来检测核心数量.我很高兴只说"做8个实例",但这就是我想要多次运行的原因.有没有办法让我在upstart脚本中使用"start on"子句自动执行此操作?

例如,启动实例1,2,3,4?然后让它们在关机时正常退出?

我想我可以将它挂钩到init.d脚本中,但我想知道upstart是否可以处理这样的事情,或者是否有人已经弄清楚了这个问题.

干杯啦!

upstart instance worker gearman

28
推荐指数
1
解决办法
1万
查看次数

有没有办法访问Gearman管理?

我希望能够查询一个gearman服务器来确定我运行的一个工人的实例数(基本上我想确保它RunTaskA可用并且RunTaskB如果没有工人处理这些任务就可用,我希望能够发送警惕.

有没有办法做到这一点?

另外:疯狂的道具,如果你知道一种PHP方式来查询gearman服务器.

编辑:我知道本地可用的PHP gearman扩展,但我不是在寻找任务提交扩展,我需要一些东西,允许我查询gearman服务器,看看有多少工人正在为特定任务服务.

php gearman

25
推荐指数
2
解决办法
8722
查看次数

让Supervisord定期重启子进程

我在ubuntu 12.04上使用Supervisor(3.0a12)来管理php gearman worker.有时,工人陷入一种奇怪的状态,他们使用大量的cpu和ram.虽然我正在解决这个问题,但我认为让Supervisor偶尔会自动杀死并刷新工作人员会很好.我查看了http://supervisord.org/configuration.html配置文档,似乎没有看到任何允许这样做的选项.

有谁知道是否有可能让supervisord定期重启它管理的所有进程?

php python gearman supervisord

23
推荐指数
3
解决办法
1万
查看次数

当客户端发送大负载时,Gearman会变慢

我有一个使用Gearman的问题,当我通过Gearman PHP扩展发送大量有效载荷时,将任务传输给工人的速度很慢.事实上,我们没有发现有效载荷那么大(它是30MB).一切(PHP,Gearman,节点)暂时在本地运行,因此网络访问不是瓶颈.

PHP脚本

这是PHP客户端:

ini_set('memory_limit', '1G');

$client= new GearmanClient();
$client->addServer('127.0.0.1', '4730');

$schema = file_get_contents('schema.json');
$data = file_get_contents('data.json');

$gearmanData = [
    'schema' => $schema,
    'data' => $data
];

echo "Encoding in JSON the payload\n";

$gearmanDataString = json_encode($gearmanData, JSON_FORCE_OBJECT);

echo "Sending job to Gearman\n";

// This line takes long to execute...
$result = $client->doNormal("validateJsonSchema", $gearmanDataString);

echo "Job finished\n";

var_dump($result);
Run Code Online (Sandbox Code Playgroud)

这是我的nodejs worker,它最终会做一些事情,但是为了证明工作者代码不是问题而是空的:

var gearmanode = require('gearmanode');

var worker = gearmanode.worker({host: '127.0.0.1' port: 4730});

worker.addFunction('validateJsonSchema', function (job) {
    console.log('I will do something');

    job.workComplete('Toasty!');
}); …
Run Code Online (Sandbox Code Playgroud)

php gearman node.js

23
推荐指数
1
解决办法
1415
查看次数

从Gearman作业服务器中删除所有Gearman作业

有没有办法从Gearman作业服务器中删除所有Gearman作业?我有一个PHP应用程序在后台运行Gearman作业.对于我的单元测试,我需要确保a)没有工作等待执行它的工人和b)没有工人工作.后者并不重要,因为它很容易杀死工人而前者 - 我不知道如何实现这一点.

php unit-testing gearman

14
推荐指数
1
解决办法
2万
查看次数

如何获得齿轮箱中特定类型的排队作业数量?

我有一些齿轮工作的客户发送工作,比如job1.

$client = new GearmanClient();
$client->addServer();
$client->doBackground('job1', 'workload');
Run Code Online (Sandbox Code Playgroud)

处理这项工作需要10秒钟.我想跟踪有多少'job1'工作等待工人在任何给定时间工作.我怎样才能做到这一点?

php gearman

13
推荐指数
3
解决办法
2万
查看次数

任何Gearman教程?

我正在寻找一个全面的Gearman教程(最好使用PHP API).我试图了解这个过程的流程.我将守护进程设置为运行,创建客户端和工作程序,但如何使用Gearman处理它们(如添加/删除工作程序等)?

php gearman

13
推荐指数
3
解决办法
9078
查看次数

什么是任务和做什么之间的区别

当查看php gearman文档时,我看到有任务和做,他们都有背景和非背景,他们也都有高低和正常.

谁能澄清这些?我只是对这种差异感到困惑.

php gearman

13
推荐指数
2
解决办法
1734
查看次数