我正在使用CakePHP(3.6)事件在某个操作上发送电子邮件。并希望使用队列执行不同的操作。 为此,我已经集成了Queuesadilla插件,并使用了 MysqlEngine 。
大多数情况下,我一直关注此博客https://someguyjeremy.com/2017/07/queued-events-in-cakephp.html。
我已经通过执行此命令启动了工作程序。
$ 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);
我想念什么吗?帮助将不胜感激。谢谢!