Първо, имайте предвид, че това е форматът на заданията в базираната на база данни опашка в Laravel 5.3. По-новите версии на Laravel съдържат промени.
Колоната за полезен товар трябва да съдържа json обект от следния формат. Работата (...\\[email protected]
) може да бъде твърдо кодиран в този сценарий. Вярвам, че ключът commandName е само за целите на показване. Командният ключ обаче е по-трудната част, той трябва да е валиден обект, който unserialize() поддържа. Изглежда, че има пакети, налични на npm за тази цел, бързо търсене показа php-сериализация.
{
"job": "Illuminate\\Queue\\[email protected]",
"data": {
"commandName": "App\\Jobs\\MyJobClass",
"command": "O:19:\"App\\Jobs\\MyJobClass\"... /* stuff */"
}
}
Предоставеният от вас полезен товар json води до следния обект. Както заданието, така и ключовете за данни са важни.
{
"job": "Illuminate\\Broadcasting\\BroadcastEvent",
"data": {
"event": "O:28:\"App\\Events\\NotificationEvent\":5:{s:7:\"\u0000*\u0000name\";s:12:\"notification\";s:4:\"data\";a:4:{s:4:\"testkey\";s:14:\"testval\";s:9:\"timestamp\";s:19:\"2017-02-24 11:07:48\";s:5:\"event\";s:12:\"notification\";s:5:\"class\";s:28:\"App\\Events\\NotificationEvent\";}s:10:\"\u0000*\u0000channel\";N;s:7:\"\u0000*\u0000user\";O:45:\"Illuminate\\Contracts\\Database\\ModelIdentifier\":2:{s:5:\"class\";s:8:\"App\\User\";s:2:\"id\";i:2;}s:6:\"socket\";N;}"
},
"id": "XuUKRTf8CTSdzaVgp2gRcvmxQqLcpBUG",
"attempts": 1
}
Предполагам, че проблемната част е сериализираният обект. Преформатиран по начин, който е по-лесен за четене (но напълно го нарушава) ...
O:28:"App\Events\NotificationEvent":5:{
// protected $name = 'notification'
s:7:" * name";s:12:"notification";
// public $data = array(...)
s:4:"data";a:4:{
// 'testkey => 'testval'
s:4:"testkey";s:14:"testval";
// 'timestamp' => '2017-02-24 11:07:48';
s:9:"timestamp";s:19:"2017-02-24 11:07:48";
// 'event' => 'notification';
s:5:"event";s:12:"notification";
// 'class' => App\Events\NotificationEvent::class;
s:5:"class";s:28:"App\Events\NotificationEvent";
}
// protected $channel = null;
s:10:"\0*\0channel";N;
// protected $user = (instance of ModelIdentifier)
s:7:"\0*\0user";O:45:"Illuminate\Contracts\Database\ModelIdentifier":2:{
// public $class = App\User::class;
s:5:"class";s:8:"App\User";
// public $id = 2;
s:2:"id";i:2;
}
// public $socket = null;
s:6:"socket";N;
}
Този формат разкрива факта, че вашата работа използва характеристиката SerializesModels, която заменя препратките към модели като обикновен запис, съдържащ клас+идентификатор, и ще ги възстанови по време на __wakeup.
Вярвам, че проблемът ви е с умствения анализ на json и сериализирания формат; Вашата предполагаема структура е ... грешна.
Следващите стъпки не биха били да гадаете нищо.1. Дублирайте това точно известие за тест, за което вече имате полезния товар. Просто го копирайте и поставете. (Може да се наложи да промените идентификатора, предполагам, че се използва за дедупликация.)2. Създайте данните за събитието с помощта на php-сериализация и се стремете да изградите нещо, идентично с оригиналния полезен товар на събитието. Без никакви промени.3. Ако работи дотук, не се колебайте да промените сериализираните данни за събитие, за да видите какво ще се случи.