【问题标题】:Laravel 5.2 Delete a queue in JobLaravel 5.2 在 Job 中删除队列
【发布时间】:2016-03-02 15:38:15
【问题描述】:

在控制器中:

$smsData = [
            'number'    =>  $customer->phone,
            'message'   =>  'Test',
        ];

        $job = (new SendMessage($smsData))->delay(env('DELAY_QUEUE'))->onQueue(env('SMS_QUEUE'));

        $this->dispatch($job);

SendMessage 类:

<?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);
    }

}

SMS 确实通过了,但队列并未从 Iron 中移除(因此发送多条相同的 SMS,返回 NO RESPONSE CODE ATALL)。

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

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

【问题讨论】:

  • 确定您的代码没有遇到致命错误,阻止它到达您删除队列作业的行吗?可能想尝试/抓住。或者在删除时添加调试日志,以便确认它运行。
  • @jszobody 已经这样做了,没有日志,没有错误,短信确实通过了

标签: php queue laravel-5.2 iron.io


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-06-10
    • 2014-12-08
    • 2016-08-22
    • 2017-01-16
    • 2017-03-18
    • 1970-01-01
    • 2017-01-28
    • 2016-06-05
    • 2016-12-26
    相关资源
    最近更新 更多