dmank/gearman
最新稳定版本:3.3.0
Composer 安装命令:
composer require dmank/gearman
包简介
Gearman Worker / Dispatcher Implementation
关键字:
README 文档
README
Installation
Über Composer
composer require dmank/gearman:@stable
{
"require": {
"dmank/gearman": "@stable"
}
}
Benutzung
Client
Beispiel Benutzung des Clients
<?php require_once __DIR__.'/../vendor/autoload.php'; // we can multiple servers due the collection $serverCollection = new \dmank\gearman\ServerCollection(); // adding a local gearman connection $server = new \dmank\gearman\Server(); $serverCollection->add($server); //tada , we can use the client! $client = new \dmank\gearman\Client($serverCollection);
Asynchrone Abarbeitung
Methode "executeInBackground", erwartet den Methodennamen der ausgeführt werden soll sowie den Workload. Als Rückgabe bekommt man das zugewiesene Jobhandle zurück um den Status überprüfen zu können.
Synchrone Abarbeitung
Methode "executeJob", erwartet Methodenname sowie Workload. Als Rückgabe bekommt man den Joboutput zurück. Hier kann dementsprechend kein Status abgefragt werden.
Jobstatus holen
Methode "getJobStatus", erwartet das JobHandle (string) als Übergabe Parameter. Gibt ein Objekt "JobStatus" zurück welches die Methoden "isCompleted, isRunning, isKnown" anbietet. Completed gilt der Job wenn er nicht mehr "isKnown" & "isRunning" ist. (Information von Gearman)
Worker
Der Worker selber läuft solange wie er kann, sollte diesem kein Verhalten über das Eventing mitgeteilt werden. Hier bietet sich zum Beispiel ein EventHandler an, der vor/nach jeder Funktionsausführung prüft wieviel RAM verbraucht wurde, und im Zweifel den Worker beendet. Ein weiteres Beispiel wäre eine maximale Zeit für den Worker einzustellen. Hier kann man zum Beispiel, wenn der Job zu lange im IDLE Modus ist, diesen beenden. Beispiel Worker
<?php require_once __DIR__.'/../vendor/autoload.php'; // we can multiple servers due the collection $serverCollection = new \dmank\gearman\ServerCollection(); // adding a local gearman connection $server = new \dmank\gearman\Server(); $serverCollection->add($server); //no must have, but nice to have! $log = new \Monolog\Logger('jobworker'); $streamHandler = new \Monolog\Handler\StreamHandler('php://output'); $streamHandler->setLevel(\Monolog\Logger::DEBUG); $log->pushHandler($streamHandler); $eventDispatcher = new \Symfony\Component\EventDispatcher\EventDispatcher(); $eventDispatcher->addSubscriber(new \dmank\gearman\event\subscriber\Monolog($log)); $jobCollection = new \dmank\gearman\JobCollection(); $worker = new \dmank\gearman\Worker( $serverCollection, $jobCollection, $eventDispatcher ); $worker->run();
Events
Der Worker stellt über Eventing folgende Events bereit: (In dieser Reihenfolge)
- WorkerEvent::EVENT_BEFORE_RUN
- ConnectToServerEvent::CONNECT_TO_SERVER_EVENT
- ConnectToServerEvent::CONNECTED_TO_SERVER_EVENT
- RegisterFunctionEvent::EVENT_ON_BEFORE_REGISTER_FUNCTIONS
- RegisterFunctionEvent::EVENT_ON_AFTER_REGISTER_FUNCTIONS
Die folgenden werden Abfragenbedingt ausgeführt:
Sollte Gearman ein IO_WAIT zurückliefern
- WorkerEvent::EVENT_ON_IO_WAIT
Bei NO_JOBS
- WorkerEvent::EVENT_ON_NO_JOBS
Bei ON_WORK
- WorkerEvent::EVENT_ON_WORK
Bei SUCCESS
- WorkerEvent::EVENT_AFTER_RUN
Jeder registrierten Funktion werden folgende Events hinzugefügt Vor Ausführung
- FunctionEvent::FUNCTION_BEFORE_EXECUTE
Nach erfolgreicher Ausführung
- FunctionEvent::FUNCTION_AFTER_EXECUTE
Im Fehlerfall
- FunctionFailureEvent::FUNCTION_ON_FAILURE
Mitgelieferte Eventsubscriber
Monolog
Am besten zum Debuggen oder um den Ablauf der Logik zu verfolgen. Der übergebene Logger wird auch an den eigentlichen Job weitergegeben sofern er "LoggerAware" ist.
MaxRunTime
Prüft vor Beginn und nach Ende einer Abarbeitung, sowie wenn keine Jobs vorhanden sind, ob die Maximallaufzeit des Workers erreich ist.
MemoryLimit
Prüft vor Beginn und nach Ender einer Abarbeitung ob die angegebene Grenze an Speicher aufgebraucht/überschritten ist. In dem Falle würde der Worker beendet werden.
dmank/gearman 适用场景与选型建议
dmank/gearman 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 10.48k 次下载、GitHub Stars 达 4, 最近一次更新时间为 2015 年 09 月 10 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「dispatcher」 「gearman」 「worker」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 dmank/gearman 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 dmank/gearman 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 dmank/gearman 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Package that provides an integration with Doctrine ORM to automatically dispatch Domain Events.
Message Queue solutions for Magento2. Supports RabbitMQ, AMQP, STOMP, Amazon SQS, Kafka, Redis, Google PubSub, Gearman, Beanstalk, Google PubSub
Adds gearman support to your Symfony2 or Symfony3 project
Event dispatcher package
A simple HTTP application builder using PSR-15 HTTP Server Request Handler and Middleware.
Alfabank REST API integration
统计信息
- 总下载量: 10.48k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 4
- 点击次数: 10
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-09-10