sql >> Databáze >  >> NoSQL >> Redis

Odeslat do fronty Laravel zvenčí Laravel (NodeJS)

Nejprve si všimněte, že toto je formát úloh ve frontě založené na databázi v Laravelu 5.3. Novější verze Laravelu obsahují změny.

Sloupec datové zátěže by měl obsahovat objekt json následujícího formátu. Úloha (...\\[email protected] ) lze v tomto scénáři pevně zakódovat. Věřím, že klíč commandName je pouze pro účely zobrazení. Příkazová klávesa je však ta těžší část, měla by to být platný objekt, který unserialize() podporuje. Vypadá to, že pro tento účel jsou na npm dostupné balíčky, rychlé vyhledávání ukázalo php-serializaci.

{
    "job": "Illuminate\\Queue\\[email protected]",
    "data": {
        "commandName": "App\\Jobs\\MyJobClass",
        "command": "O:19:\"App\\Jobs\\MyJobClass\"... /* stuff */"
    }
}

Zadaný obsah json má za následek následující objekt. Důležité jsou jak úlohy, tak datové klíče.

{
  "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
}

Problematickou částí je, předpokládám, serializovaný objekt. Přeformátováno způsobem, který je snazší číst (ale úplně to rozbíjí) ...

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;
}

Tento formát odhaluje skutečnost, že vaše úloha používá vlastnost SerializesModels, která nahrazuje odkazy na modely jako jednoduchý záznam obsahující třídu+identifikátor a obnoví je během __wakeup.

Věřím, že váš problém se týká mentální analýzy json a formátu serializace; vaše odhadovaná struktura je ... špatná.

Dalšími kroky by nebylo nic hádat.1. Duplikujte toto přesné testovací oznámení, pro které již máte užitečné zatížení. Stačí to zkopírovat a vložit. (Možná budete muset změnit id, myslím, že se používá pro deduplikaci.)2. Sestavte data události pomocí php-serializace a zaměřte se na vytvoření něčeho identického s původním užitečným zatížením události. Žádné změny vůbec.3. Pokud to funguje až sem, klidně změňte serializovaná data událostí, abyste viděli, co se stane.



  1. Ukládání do mezipaměti v Django s Redis

  2. vnořená výjimka je redis.clients.jedis.exceptions.JedisConnectionException:Nelze získat zdroj z fondu

  3. Vezmeme součet sloupce v MongoDB

  4. C# mongo dotazy s řetězci json