您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

从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\"... /* 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特性的事实,该特性将对模型的引用替换为包含class + identifier的简单条目,并将在__wakeup期间还原它们。

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

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

Node 2022/1/1 18:16:30 有511人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶