Как добавить дополнительные поля в Laravel Job Payload для внешнего приложения

Существующий ответ на аналогичный вопрос не отвечает на мой текущий вопрос, так как создание собственного диспетчера очередей невозможно, также мой вопрос уникален, поскольку я использую rabbitMQ вместе с Laravel Horizon для сообщения внешнего микросервиса, который не поддерживается в существующий вопрос.

Я использую RabbitMQ в laravel для связи с моим приложением NodeJs.

Когда я отправляю сообщение из Laravel в приложение Node, оно сериализует полезную нагрузку, и, поскольку я отправляю необработанный текст html в полезной нагрузке, мое приложение node js не может десериализовать его.

Я попытался использовать php-unserialize, но он также не может десериализовать мой объект задания как этот код из Stackoverflow, но он также не смог обработать HTML в полезной нагрузке. Вот скрипка для его реализации.

Вот пример полезной нагрузки https://jsonbin.io/60e6d93d9328b059d7b9e5b0

TestDownstreamJob::dispatch(['html' => 'Some Long HTML Text'])->onQueue('node_downstream');

{
uuid: '46a76d06-d9d5-4775-b9f4-4326dd9112b3',
displayName: 'App\\Jobs\\TestDownstreamJob',
job: 'Illuminate\\Queue\\CallQueuedHandler@call',
maxTries: null,
maxExceptions: null,
backoff: null,
timeout: null,
retryUntil: null,
data: {
  commandName: 'App\\Jobs\\TestDownstreamJob',
  command: 'O:26:"App\\Jobs\\TestDownstreamJob":11:{s:8:"campaign";s:8:"testData";s:3:"job";N;s:10:"connection";N;s:5:"queue";s:15:"node_downstream";s:15:"chainConnection";N;s:10:"chainQueue";N;s:19:"chainCatchCallbacks";N;s:5:"delay";N;s:11:"afterCommit";N;s:10:"middleware";a:0:{}s:7:"chained";a:0:{}}'
},
id: 'f213fa1b-eabf-4686-be90-0347c9e0631a',
type: 'job',
tags: [],
pushedAt: '1625055793.0774'
}

Как я могу добавить в data дополнительные поля, которые не сериализуются? Создание нового собственного диспетчера очередей - это то, чего я не ищу, потому что я использую Horizon и Redis для некоторых других очередей.

Я пробовал некоторые существующие пакеты, такие как siamiondavydau / external-queue и kristianedlund / laravel-external-queue, но они оба устарели и не поддерживают последнюю версию очередей Laravel


person Pankaj Jha    schedule 08.07.2021    source источник
comment
здесь кто-то уже работал с функцией JS для десериализации php-сериализации stackoverflow.com/a/53461999/4369919   -  person N69S    schedule 08.07.2021
comment
Отвечает ли это на ваш вопрос? Десериализовать массив PHP в Javascript   -  person N69S    schedule 08.07.2021
comment
это не работает, если у вас есть HTML-текст в сериализованной строке. вот пример моей потенциальной полезной нагрузки. jsonbin.io/60e6d93d9328b059d7b9e5b0 Я получаю ‹a class = 'gotoL # 182: 23 '›182: 23 ‹/a› Uncaught SyntaxError: missing) после списка аргументов, когда я выполняю предложенный вами код   -  person Pankaj Jha    schedule 08.07.2021
comment
Вот скрипка для того же jsfiddle.net/pankajjha_145/cmr3na7u/1   -  person Pankaj Jha    schedule 08.07.2021
comment
Кажется, что одинарные и двойные кавычки затрудняют десериализацию вашей полезной нагрузки   -  person Rajan Singh    schedule 08.07.2021
comment
Вы используете одинарную кавычку ' в качестве разделителя для десериализации большой строки. он работал с двойной кавычкой "   -  person N69S    schedule 08.07.2021
comment
начинаются с двойной кавычки в log(PHP.parse("O:26: и заканчиваются двойной кавычкой chained\";a:0:{}}"));   -  person N69S    schedule 08.07.2021