Laravel工人没有尝试这项工作,而是删除了它

问题描述 投票:2回答:1

laravel 5.4PHP 7.1.32主管3.3.1(我知道...我知道。公司已经落后了3年)

config / queue.php

'database' => [
    'driver' => 'database',
    'connection' => 'queue', // means in config/database.php I have to setup a new connection
    'table' => 'jobs',
    'queue' => 'default',
    'retry_after' => 90,
],

主管配置

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/project/artisan queue:work
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/html/project/storage/logs/supervisord.log

SCENARIO:调度队列后,新行将添加到jobs表中。然后,将Laravel Worker分配给作业,这就是reserved_atattempts列被更新的时间。作业完成后,该行(作业)将被删除。

现在,由于某些神秘的原因,有时作业可以无缝地进行工作[[&有时有作业,但是没有指派工人,并且在一秒钟之内该作业被删除。刚刚发生了什么?另外,这是断断续续的,以至于很难跟踪实际尝试过哪些作业,后来又被此问题删除或刚刚删除。

现在至少我已经挠头了一周,请指导我。


编辑

-php artisan queue:restart广播,主管更新了正常运行时间,但在此问题上没有任何改善。-后来,我删除了主管,并尝试执行手动方式php artisan queue:work,甚至是删除了作业而不是尝试作业((failed_jobs中也未插入新数据)。

编辑(2)-日志

这是调度工作的功能public static function sendVoiceCall($instituteSmsSettings, $announcementId, $postUrl, $mobileNumbers) { Log::debug('Job dispatched'); dispatch(new SendVoiceCall($instituteSmsSettings, $announcementId, $postUrl, $mobileNumbers)); }
这里是

工作

<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Support\Facades\Log; class SendVoiceCall implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $tries = 3; protected $ARR_POST_DATA = array(); protected $postUrl = ''; public function __construct($instituteSmsSettings, $announcementId, $postUrl, $mobileNumbers) { $this->ARR_POST_DATA['username'] = $instituteSmsSettings->username; $this->ARR_POST_DATA['token'] = $instituteSmsSettings->token; $this->ARR_POST_DATA['announcement_id'] = $announcementId; $this->ARR_POST_DATA['plan_id'] = $instituteSmsSettings->plan_id; $this->ARR_POST_DATA['caller_id'] = $instituteSmsSettings->caller_id; $this->ARR_POST_DATA['contact_numbers'] = $mobileNumbers; $this->postUrl = $postUrl; } public function handle() { Log::debug('Job started'); $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $this->postUrl); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($this->ARR_POST_DATA)); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $sendCallResponse = curl_exec($curl); $curlResponse = json_decode($sendCallResponse, true); curl_close($curl); Log::info('Queue complete. Announcement Id: ' . ($this->ARR_POST_DATA['announcement_id'] ?? '')); } }
这里是

日志

[2020-04-13 10:17:49] production.DEBUG: Job dispatched [2020-04-13 10:17:50] production.DEBUG: Job started [2020-04-13 10:17:50] production.INFO: Queue complete. Announcement Id: 203691
如您所见,队列是同时开始和结束的(应该相差2-3秒。

工作人员正在删除作业,而不是尝试作业。

php laravel queue supervisord
1个回答
0
投票
您的工作正在发出卷曲请求,但不进行任何错误处理或检查该呼叫。该请求可能由于某种原因而失败,但是这项工作永远不会告诉您。特别是现在,当出现无法解释的问题时,对请求和响应进行一些基本的错误检查是有意义的。

您可以检查几件事。解决此特定问题后,可能无需执行所有这些操作,但是您可能应该至少使用其中的一个来保持此呼叫的状态。

  • 使用curl_error()检查呼叫是否正常;
  • 使用curl_error()向您显示网络请求和响应的详细信息。这将为您提供很多信息,包括curl_getinfo(),您可以测试一下它是curl_getinfo()还是您期望的任何内容;
  • 如果远程服务器响应某些消息-大概是因为您正在http_response对其进行记录-请对其进行记录。如果响应中包含某种成功/失败元素,请对其进行测试,确保它符合您的期望;

例如(如前所述,您通常不会做所有这些事情,只选择适合您的情况):

200

© www.soinside.com 2019 - 2024. All rights reserved.