栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

从Laravel(NodeJS)外部推送到Laravel队列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

从Laravel(NodeJS)外部推送到Laravel队列

首先,请注意,这是Laravel 5.3中基于数据库的队列中作业的格式。Laravel的较新版本包含更改。

有效负载列应包含以下格式的json对象。

...\CallQueuedHandler@call
在这种情况下,可以对作业()进行硬编码。我相信commandName键仅用于显示目的。但是,命令键是更难的部分,它应该是unserialize()支持的有效对象。看起来npm上有为此目的可用的软件包,快速搜索打开了php-
serialization

{    "job": "Illuminate\Queue\CallQueuedHandler@call",    "data": {        "commandName": "App\Jobs\MyJobClass",        "command": "O:19:"App\Jobs\MyJobClass"... "    }}

您提供的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:"AppEventsNotificationEvent":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' => AppEventsNotificationEvent::class;        s:5:"class";s:28:"AppEventsNotificationEvent";    }    // protected $channel = null;    s:10:"*channel";N;    // protected $user = (instance of ModelIdentifier)    s:7:"*user";O:45:"IlluminateContractsDatabaseModelIdentifier":2:{        // public $class = AppUser::class;        s:5:"class";s:8:"AppUser";        // public $id = 2;        s:2:"id";i:2;    }    // public $socket = null;    s:6:"socket";N;}

这种格式暴露了您的工作使用SerializesModels特性的事实,该特性将对模型的引用替换为包含class +
identifier的简单条目,并将在__wakeup期间还原它们。

我相信您的问题在于对json和序列化格式进行心理分析;您猜测的结构是…错误的。

下一步将不会猜测任何东西。1.复制您已经拥有有效负载的确切测试通知。只需复制粘贴即可。(您可能需要更改ID,我想它是用于重复数据删除的。)2.使用php-
serialization构建事件数据,旨在构建与原始事件有效内容相同的东西。完全没有变化。3.如果目前为止仍然有效,请随时更改序列化事件数据以查看发生了什么。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385347.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号