Primeiro, observe que este é o formato dos trabalhos na fila baseada em banco de dados no Laravel 5.3. Versões mais recentes do Laravel contém alterações.
A coluna de carga útil deve conter um objeto json com o formato a seguir. O trabalho (
...\\[email protected]
) pode ser codificado neste cenário. Eu acredito que a chave commandName é apenas para fins de exibição. A chave de comando, no entanto, é a parte mais difícil, deve ser um objeto válido que unserialize() suporta. Parece que existem pacotes disponíveis no npm para esse fim, uma pesquisa rápida revelou php-serialization. {
"job": "Illuminate\\Queue\\[email protected]",
"data": {
"commandName": "App\\Jobs\\MyJobClass",
"command": "O:19:\"App\\Jobs\\MyJobClass\"... /* stuff */"
}
}
A carga json que você forneceu resulta no objeto a seguir. Tanto o trabalho quanto as chaves de dados são importantes.
{
"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
}
A parte problemática, presumo, é o objeto serializado. Reformatado de uma forma que é mais fácil de ler (mas quebra totalmente) ...
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;
}
Esse formato expõe o fato de que seu trabalho usa o atributo SerializaModels que substitui referências a modelos como uma entrada simples contendo classe+identificador e os restaurará durante __wakeup.
Acredito que seu problema seja com a análise mental do json e do formato serialize; sua estrutura suposta está... errada.
Os próximos passos não seriam adivinhar qualquer coisa.1. Duplique esta notificação de teste exata para a qual você já tem a carga útil. Basta copiar e colar. (Pode ser necessário alterar o id, acho que é usado para desduplicação.)2. Construa os dados do evento usando php-serialization e tente construir algo idêntico ao payload original do evento. Nenhuma mudança em tudo.3. Se funcionar até aqui, sinta-se à vontade para alterar os dados do evento serializado para ver o que acontece.