Enh: Upgraded zhuravljov\yii\queue to version 0.11, fixed download issue

This commit is contained in:
Lucas Bartholemy 2017-04-03 19:39:47 +02:00
parent e30ae11a3e
commit ac3ef62056
7 changed files with 125 additions and 67 deletions

View File

@ -28,7 +28,7 @@
"nqxcode/zendsearch": "^2.0", "nqxcode/zendsearch": "^2.0",
"xj/yii2-jplayer-widget": "*", "xj/yii2-jplayer-widget": "*",
"zendframework/zend-ldap": "^2.5", "zendframework/zend-ldap": "^2.5",
"zhuravljov/yii2-queue": "^0.7", "zhuravljov/yii2-queue": "^0.11",
"bower-asset/jquery-timeago": "1.4.*", "bower-asset/jquery-timeago": "1.4.*",
"bower-asset/jquery-nicescroll": "3.6.*", "bower-asset/jquery-nicescroll": "3.6.*",
"bower-asset/jquery-knob": "1.2.*", "bower-asset/jquery-knob": "1.2.*",

View File

@ -1,39 +0,0 @@
<?php
/**
* @link https://www.humhub.org/
* @copyright Copyright (c) 2017 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*/
namespace humhub\components\queue;
use Yii;
use yii\base\Event;
use zhuravljov\yii\queue\Queue as BaseQueue;
use zhuravljov\yii\queue\ErrorEvent;
/**
* Queue
*
* @since 1.2
* @author Luke
*/
class Queue extends BaseQueue
{
/**
* @inheritdoc
*/
public function init()
{
parent::init();
Event::on(Queue::class, Queue::EVENT_AFTER_ERROR, function(ErrorEvent $errorEvent) {
/* @var $exception \Expection */
$exception = $errorEvent->error;
Yii::error('Could not execute queued job! Message: ' . $exception->getMessage() . ' Trace:' . $exception->getTraceAsString(), 'queue');
});
}
}

View File

@ -8,7 +8,10 @@
namespace humhub\components\queue\driver; namespace humhub\components\queue\driver;
use zhuravljov\yii\queue\sync\Driver; use Yii;
use yii\base\Event;
use zhuravljov\yii\queue\ErrorEvent;
use humhub\components\queue\Queue;
/** /**
* Instant queue driver, mainly used for testing purposes * Instant queue driver, mainly used for testing purposes
@ -16,30 +19,29 @@ use zhuravljov\yii\queue\sync\Driver;
* @since 1.2 * @since 1.2
* @author buddha * @author buddha
*/ */
class Instant extends Driver class Instant extends Queue
{ {
/** /**
* @inheritdoc * @inheritdoc
*/ */
public $handle = true; public function init()
/**
* @var array
*/
private $_messages = [];
/**
* Executes the jobs immediatly, serialization is done for testing purpose
*/
public function push($job)
{ {
$this->_messages[] = $this->serialize($job); parent::init();
while (($message = array_shift($this->_messages)) !== null) { Event::on(Queue::class, Queue::EVENT_AFTER_ERROR, function(ErrorEvent $errorEvent) {
$job = $this->unserialize($message); /* @var $exception \Expection */
$this->getQueue()->run($job); $exception = $errorEvent->error;
Yii::error('Could not execute queued job! Message: ' . $exception->getMessage() . ' Trace:' . $exception->getTraceAsString(), 'queue');
});
} }
/**
* @inheritdoc
*/
protected function sendMessage($message, $timeout)
{
$this->handleMessage($message);
} }
} }

View File

@ -8,7 +8,10 @@
namespace humhub\components\queue\driver; namespace humhub\components\queue\driver;
use zhuravljov\yii\queue\db\Driver; use Yii;
use yii\base\Event;
use zhuravljov\yii\queue\ErrorEvent;
use zhuravljov\yii\queue\db\Queue;
/** /**
* MySQL queue driver * MySQL queue driver
@ -16,9 +19,26 @@ use zhuravljov\yii\queue\db\Driver;
* @since 1.2 * @since 1.2
* @author Luke * @author Luke
*/ */
class MySQL extends Driver class MySQL extends Queue
{ {
/**
* @inheritdoc
*/
public $mutex = 'yii\mutex\MysqlMutex'; public $mutex = 'yii\mutex\MysqlMutex';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
Event::on(Queue::class, Queue::EVENT_AFTER_ERROR, function(ErrorEvent $errorEvent) {
/* @var $exception \Expection */
$exception = $errorEvent->error;
Yii::error('Could not execute queued job! Message: ' . $exception->getMessage() . ' Trace:' . $exception->getTraceAsString(), 'queue');
});
}
} }

View File

@ -8,7 +8,12 @@
namespace humhub\components\queue\driver; namespace humhub\components\queue\driver;
use zhuravljov\yii\queue\sync\Driver; use Yii;
use yii\base\Event;
use yii\base\Application;
use yii\base\NotSupportedException;
use zhuravljov\yii\queue\ErrorEvent;
use zhuravljov\yii\queue\Queue;
/** /**
* Sync queue driver * Sync queue driver
@ -16,9 +21,64 @@ use zhuravljov\yii\queue\sync\Driver;
* @since 1.2 * @since 1.2
* @author Luke * @author Luke
*/ */
class Sync extends Driver class Sync extends Queue
{ {
/**
* @var boolean
*/
public $handle = true; public $handle = true;
/**
* @var array
*/
private $messages = [];
/**
* @inheritdoc
*/
public function init()
{
parent::init();
if ($this->handle) {
Yii::$app->on(Application::EVENT_AFTER_REQUEST, function () {
ob_start();
$this->run();
// Important, breaks downloads
ob_end_clean();
});
}
Event::on(Queue::class, Queue::EVENT_AFTER_ERROR, function(ErrorEvent $errorEvent) {
/* @var $exception \Expection */
$exception = $errorEvent->error;
Yii::error('Could not execute queued job! Message: ' . $exception->getMessage() . ' Trace:' . $exception->getTraceAsString(), 'queue');
});
}
/**
* Runs all jobs from queue.
*/
public function run()
{
while (($message = array_shift($this->messages)) !== null) {
$this->handleMessage($message);
}
}
/**
* @inheritdoc
*/
protected function sendMessage($message, $timeout)
{
if ($timeout) {
throw new NotSupportedException('Delayed work is not supported in the driver.');
}
$this->messages[] = $message;
}
} }

View File

@ -126,12 +126,8 @@ $config = [
'clients' => [], 'clients' => [],
], ],
'queue' => [ 'queue' => [
'class' => 'humhub\components\queue\Queue',
'driver' => [
//'class' => 'humhub\components\queue\driver\MySQL',
'class' => 'humhub\components\queue\driver\Sync', 'class' => 'humhub\components\queue\driver\Sync',
], ],
],
'live' => [ 'live' => [
'class' => 'humhub\modules\live\components\Sender', 'class' => 'humhub\modules\live\components\Sender',
'driver' => [ 'driver' => [

View File

@ -0,0 +1,19 @@
<?php
use yii\db\Migration;
class m170307_170300_queuelater extends Migration
{
public function up()
{
$this->addColumn('queue', 'timeout', $this->integer()->defaultValue(0)->notNull()->after('created_at'));
}
public function down()
{
echo "m170307_170300_queuelater cannot be reverted.\n";
return false;
}
}