सबसे पहले, ध्यान दें कि यह Laravel 5.3 में डेटाबेस-आधारित कतार में नौकरियों का प्रारूप है। Laravel के नए संस्करणों में परिवर्तन शामिल हैं।
पेलोड कॉलम में निम्न प्रारूप का एक जेसन ऑब्जेक्ट होना चाहिए। नौकरी (...\\[email protected]
) इस परिदृश्य में हार्ड-कोड किया जा सकता है। मेरा मानना है कि कमांडनाम कुंजी केवल प्रदर्शन-उद्देश्यों के लिए है। कमांड कुंजी, हालांकि, कठिन हिस्सा है, यह एक वैध वस्तु होनी चाहिए जो unserialize() का समर्थन करती है। ऐसा लगता है कि इस उद्देश्य के लिए npm पर पैकेज उपलब्ध हैं, एक त्वरित खोज ने php-serialization को बदल दिया।
{
"job": "Illuminate\\Queue\\[email protected]",
"data": {
"commandName": "App\\Jobs\\MyJobClass",
"command": "O:19:\"App\\Jobs\\MyJobClass\"... /* stuff */"
}
}
आपके द्वारा प्रदान किया गया जेसन पेलोड निम्न ऑब्जेक्ट में परिणाम देता है। कार्य और डेटा कुंजियाँ दोनों महत्वपूर्ण हैं।
{
"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 विशेषता का उपयोग करती है जो मॉडल के संदर्भों को वर्ग+पहचानकर्ता वाली एक साधारण प्रविष्टि के रूप में बदल देती है, और __wakeup के दौरान उन्हें पुनर्स्थापित कर देगी।
मेरा मानना है कि आपकी समस्या जेसन के मानसिक विश्लेषण और क्रमबद्ध प्रारूप के साथ है; आपकी अनुमानित संरचना ... गलत है।
अगला कदम कुछ भी अनुमान लगाना नहीं होगा।1। इस सटीक परीक्षण अधिसूचना को डुप्लिकेट करें जिसके लिए आपके पास पहले से ही पेलोड है। बस इसे कॉपी-पेस्ट करें। (आपको आईडी बदलने की आवश्यकता हो सकती है, मुझे लगता है कि इसका उपयोग डुप्लीकेशन के लिए किया जाता है।) 2। php-serialization का उपयोग करके ईवेंट डेटा बनाएं और मूल ईवेंट पेलोड के समान कुछ बनाने का लक्ष्य रखें। बिल्कुल कोई बदलाव नहीं।3। अगर यह अब तक काम करता है, तो क्या होता है यह देखने के लिए क्रमबद्ध ईवेंट डेटा को बेझिझक बदलें।