Laravel 5.2 删除作业中的队列


Laravel 5.2 Delete a queue in Job

In Controller:

$smsData = [
            'number'    =>  $customer->phone,
            'message'   =>  'Test',
        ];
        $job = (new SendMessage($smsData))->delay(env('DELAY_QUEUE'))->onQueue(env('SMS_QUEUE'));
        $this->dispatch($job);

发送消息类:

<?php
namespace App'Jobs;
use App'Jobs'Job;
use Illuminate'Queue'SerializesModels;
use Illuminate'Queue'InteractsWithQueue;
use Illuminate'Contracts'Queue'ShouldQueue;
//use Guzzle'Http'Client;
class SendMessage extends Job implements ShouldQueue {
    protected $data, $url;
    use InteractsWithQueue, SerializesModels;
    public function __construct(array $data) {
        $this->data = $data;
        $this->url = 'https://reguler.zenziva.net/apps/smsapi.php?userkey=' . env('ZENZIVA_USERKEY') . '&passkey=' . env('ZENZIVA_PASSKEY');
    }
    public function handle() {
        $client = new 'GuzzleHttp'Client();
        $smsData = $this->data;
        $res = $client->request('GET', $this->url . '&nohp=' . $smsData['number'] . '&pesan=' . $smsData['message']);
        if ($res->getStatusCode() !== 200) { 'Log::info($res->getBody()); }
        $this->delete();
        return 'Response::json(['type' => 'success'], 200);
    }
}
短信

确实通过,但队列没有从铁中删除(因此发送多条相同的短信,在 ALL 返回无响应代码)。

奇怪的是,如果我跳过 guzzle 请求,队列将从铁中删除,因此 POST 返回响应 200。

知道如何解决这个问题吗?

最有可能的是,您正在为 Laravel 使用已弃用的 IronMQ 插件版本。新的 IronMQ 版本需要 2 个参数才能删除作业:message_id 和reservation_id。旧插件仅传递message_id因此作业不会被删除并继续留在队列中。

随意使用这个 IronMQ 的 Laravel 驱动程序。它专为不同的Laravel版本设计,包括5.2。