Я пытаюсь заставить слушателей работать с очередью.Все настроено правильно для подключения к серверу Redis.
Событие
class BillingEvent extends BaseEvent
{
use Dispatchable, InteractsWithSockets, SerializesModels;
private $event;
private $data;
public function __construct(Subscription $subscription, $event, $data = [])
{
parent::__construct($subscription);
$this->event = $event;
$this->data = $data;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
public function getEvent()
{
return $this->event;
}
/**
* If we need to know additional data.
* @return array
*/
public function getData(): array
{
return $this->data;
}
}
Слушатель
class BillingEventListener implements ShouldQueue
{
use InteractsWithQueue;
public function handle(BillingEvent $event)
{
Log::error($event->getEvent()." test !!! ");
}
public function failed(BillingEvent $event, $exception)
{
//
}
}
Вот как я запускаю событие:
$sub = Subscription::find(1);
event(new BillingEvent($sub, LogEvents::BILLING_SUBSCRIPTION_CANCELLED));
После четных пожаров я смотрю на свое хранилище Redis, чтобы посмотреть, сохранено ли что-то и имеет ли оно.
1) "queues: default: notify" 2) "queues: default"
Когда я смотрю на очереди: по умолчанию у него есть JSON.
{"displayName": "App \ Listeners \ BillingEventListener", "job": "Illuminate \ Queue \ CallQueuedHandler @ call", "maxTries": null, "timeout": null, "timeoutAt": null, "data": {"commandName": "Illuminate \ Events \ CallQueuedListener", "command":"О: 36: \" осветить \ События \ CallQueuedListener \ ": 7: {s: 5: \" класс \ "s: 34: \" App \ Слушателей \ BillingEventListener \ "; s: 6: \" метод \"; s: 6: \" ручка \ "; s: 4: \" данные \ "; а: 1: {я: 0; O: 23: \" App \ События \ BillingEvent \ ": 3: {s:30: \ "\ u0000App \ События \ BillingEvent \ u0000event \"; s: 30: \ "billing_subscription_cancelled \"; s: 29: \ "\ u0000App \ События \ BillingEvent \ u0000data \", а: 0: {} s:6: \ "гнездо \", N;}} s: 5: \ "пытается \", N; s:9: \ "timeoutAt \"; N; s: 7: \ "timeout \"; N; s: 6: \ "\ u0000 * \ u0000job \"; N;} "}," telescope_uuid ":" 8d6dcd7a-5747-41e5-84ec-082828c94ffa "," id ":" hUmv4Pis9adXyBW5kLHoCAai18sFExBe "," попытки ": 0}
Очередь работает, но код в функции дескриптора никогда не вызывается.Когда я установил синхронизацию моего драйвера очереди, все сразу выполняется.
По умолчанию я получил соединение Redis в очереди:
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
]