На сервере под управлением Debian 8 установил gearman-job-server из стандартного репозитория. Сейчас top показывает 6 процессов gearmand.
Через PECL установил расширение gearman.so и добавил во все конфиги php.ini.
phpinfo() показывает наличие gearman:
extension version 1.1.2
libgearman version 1.0.6
Default TCP Host localhost
Default TCP Port 4730
Пытаюсь завести
Yii2 Queue Extension на Yii2 Advanced App.
В common/config/main.php прописал:
'bootstrap' => ['queue'],
'components' => [
'queue' => [
'class' => \zhuravljov\yii\queue\gearman\Queue::class,
'as log' => \zhuravljov\yii\queue\LogBehavior::class,
'host' => 'localhost',
'port' => 4730,
'channel' => 'my_queue',
],
],
Создал Job
namespace common\jobs;
use common\models\Project;
use yii\base\Object;
class UploadJob extends Object implements \zhuravljov\yii\queue\Job
{
public $projectId;
public function run()
{
$project = Project::findOne($this->projectId);
$project->status = Project::STATUS_PROCESSING;
$project->save();
\Yii::info('here will be upload job for project ' . $project->name);
$project->status = Project::STATUS_READY;
$project->save();
}
}
В action контроллера, где нужно добавлять job в очередь, прописал:
Yii::$app->queue->push(new UploadJob([
'projectId' => $model->id,
]));
Запускаю listener (если не запускать - проблема та же):
./yii queue/listen
Командная строка ничего не отвечает и как бы висит в режиме ожидания, то есть listener запустился и ждёт, если я правильно понимаю.
Запускаю action в браузере и когда доходит до
Yii::$app->queue->push
сайт виснет (остальные сайты работают) и приходится рестартовать демона apache2, а listener отключать через Ctrl+C. gearmand.log чистый от слова совсем.