[英]Laravel Queue PushRaw Delay?
我有一个应用程序,其中从 laravel 4.2 开始,我正在慢慢将其转换为节点。
现在我有这个Queue::pushRaw(payload, tube)
作业在节点中,并且这段代码工作得很好。
但是我最近有一个问题,我需要这些工作有延迟。
我之前使用Queue::later
(当我的工作仍在 Laravel 中时),但是如何使用Queue::pushRaw
来做到这一点? 我不能再使用Queue::later
因为我传递的是原始有效负载而不是作业。
根据文件,我可以通过options
https://laravel.com/api/4.2/Illuminate/Queue/QueueInterface.html
但是,我不知道要传递哪些options
来延迟。
经过进一步调查,我发现了这个文件: https : //github.com/laravel/framework/blob/4.2/src/Illuminate/Queue/BeanstalkdQueue.php#L66 (我正在使用Beanstald)
由于DEFAULT_DELAY为0,因此您无法真正通过延迟。
因此,我的解决方案是在Laravel中创建工作。
然后,我可以执行Queue::later(delay, myJobThatCallsThePushRaw, data, queue);
然后在myJobThatCallsThePushRaw
执行Queue::pushRaw(my-node-payload)
。
希望这对以后的人有所帮助。
我在我的代码中做了这个延迟,我在数据库中添加了一个字段,在我做我的工作之前,我检查了最后一次检查。如果超过 X 秒,好的,你可以做这个工作,延迟重新排队。
在我队列的消费者中:
RabbitmqFacade::consumer('trx_need_to_confirm_check', function ($data) {
$message = json_decode($data->body, true);
if ($message['type'] == 1) {
$operationResult = $this->tronMainConfirmService->startService($message);
}
else {
$operationResult = $this->tronMainWithdrawalService->startCheckConfirmService($message);
}
if (!$operationResult['ackAble']) {
RabbitmqFacade::product('trx_need_to_confirm_check', $message, true, true, 30000);
}
$data->ack();
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.