Я использую CakePHP (3.6) Events для отправки электронной почты по определенному действию.И хочу использовать очередь для разных действий.Для этой цели я добавил плагин Queuesadilla и использую MysqlEngine .
В основном я следил за этим блогом https://someguyjeremy.com/2017/07/queued-events-in-cakephp.html.
Iначали рабочий, выполнив эту команду.
$ bin / cake queuesadilla
Событие было поставлено в очередь и очищено через определенное время (допустим, задержка составляет 10 секунд).Но метод, который должен вызываться после отправки, не вызывается.Но это говорит
Успех.Подтверждение задания в очереди
.
У меня есть отдельный слушатель. Вот оно.
namespace App\Event;
use Cake\Event\EventListenerInterface;
use Cake\Log\Log;
use App\Queue\QueueManager;
class TestListener implements EventListenerInterface
{
public function implementedEvents()
{
Log::write("debug","inside listener");
return [
'Controller.Reports.afterRemove' => 'afterRemove',
];
}
public function afterRemove($event)
{
Log::write('debug', "Test listener has been fired");
}
}
Не понимаю, почему afterRemove () метод не был вызван?И я хочу отправить письмо от этого метода, но похоже, что он не вызывается!
И вот как я поставил задачу в очередь
$test = [
1=>"Test message"
];
$event = new Event('Controller.Reports.afterRemove', null,$test);
QueueManager::queue($event, [
'delay' => 10
]);
Вот как я подключил мой слушатель к глобальной
use App\Event\TestListener;
use Josegonzalez\CakeQueuesadilla\Queue\Queue;
Configure::load('queuesadilla', 'default', false);
Queue::setConfig(Configure::consume('Queuesadilla'));
$testListener =new TestListener();
EventManager::instance()->on($testListener);
Я что-то упустил?Помощь будет оценена.Спасибо!