#php #laravel #redis #queue #laravel-artisan
Вопрос:
Я использую Laravel v7.0. Я внедрил задания Laravel для отправки OTP. php artisan queue:work
отлично работает в системе разработки. Но когда я переместил свой код на рабочий сервер, он не работал. Я использую redis
в качестве подключения к очереди. Когда я отправлял запросы OTP, задания были добавлены в базу данных redis, но php artisan queue:work
не работали. Я также попробовал supervisor запустить рабочего. И то, и другое не работает. Я также очистил конфигурацию кэша на реальном сервере
Моя функция контроллера
private function sendOtp($phoneNumber)
{
try {
return $this->dispatch(new OTPSend($phoneNumber));
} catch (Exception $e) {
throw $e;
}
}
Задание на отправку
class OTPSend implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* @var string
*/
public $phoneNumber;
/**
* Create a new job instance.
*
* @param string $phoneNumber
*/
public function __construct($phoneNumber)
{
$this->phoneNumber = $phoneNumber;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
try {
$twilio = new Client(config('app.twilio.SID'), config('app.twilio.TOKEN'));
$twilio->verify->v2->services(config('app.twilio.TWILIO_VERIFICATION_SID'))
->verifications
->create(' 91' . $this->phoneNumber, "sms");
} catch (Exception $e) {
$this->failed($e);
}
}
public function failed($exception = null)
{
error_log($exception->getMessage());
// Handle exception case
}
}
.env
BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=******
REDIS_PORT=6379
config/queue
'default' => env('QUEUE_CONNECTION', 'sync'),
'connections' => [
'sync' => [
'driver' => 'sync',
],
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
'beanstalkd' => [
'driver' => 'beanstalkd',
'host' => 'localhost',
'queue' => 'default',
'retry_after' => 90,
'block_for' => 0,
],
'sqs' => [
'driver' => 'sqs',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'),
'queue' => env('SQS_QUEUE', 'your-queue-name'),
'suffix' => env('SQS_SUFFIX'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => 5,
'after_commit' => true,
],
],
Задания после вызова функции контроллера в redis
LRANGE app_database_queues:default 0 100
1) "{"uuid":"8521c394-aa69-4ca5-a4ed-04119e46e898","displayName":"App\\Jobs\\OTPSend","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"maxExceptions":null,"delay":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\OTPSend","command":"O:16:\"App\\Jobs\\OTPSend\":9:{s:11:\"phoneNumber\";s:10:\"88888888888\";s:3:\"job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";N;s:10:\"middleware\";a:0:{}s:7:\"chained\";a:0:{}}"},"id":"SuXRbRR01sVA9caqlcFfR2jqGU74voxN","attempts":0}"
2) "{"uuid":"d7fbc815-0f15-4e6b-9a6a-28b890b2eb07","displayName":"App\\Jobs\\OTPSend","job":"Illuminate\\Queue\\CallQueuedHandler@call","maxTries":null,"maxExceptions":null,"delay":null,"timeout":null,"timeoutAt":null,"data":{"commandName":"App\\Jobs\\OTPSend","command":"O:16:\"App\\Jobs\\OTPSend\":9:{s:11:\"phoneNumber\";s:10:\"8888888888\";s:3:\"job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\"chainConnection\";N;s:10:\"chainQueue\";N;s:5:\"delay\";N;s:10:\"middleware\";a:0:{}s:7:\"chained\";a:0:{}}"},"id":"uUqU5S6JTl1OOarLWsXLOCUabBTawPfT","attempts":0}"