मैं लैरवेल 5.1 का उपयोग कर रहा हूं।लैरवेल कतारों का उपयोग करते समय नौकरियों से बचने के लिए डीबी टेबल ताले मुद्दे कैसे?
कतारों का उपयोग कई प्रणालियों के बीच डेटा लाने/समन्वयन के लिए किया जाता है।
मैं डेटाबेस ड्राइवर का उपयोग करता हूं, 3 "कारीगर कतार: कार्य - डिमन" प्रक्रियाएं हर समय चल रही हैं।
नौकरियां सिस्टम उपयोगकर्ताओं और शेड्यूलर (क्रॉन) दोनों द्वारा भेजी जाती हैं। नौकरियों को प्राथमिकता देने के लिए तीन कतारों का उपयोग किया जाता है।
सबकुछ ठीक काम करने लगता है - नौकरियां तालिका रिकॉर्ड से भर जाती है, सिस्टम उनका ख्याल रखता है और किए गए लोगों को हटा देता है।
हालांकि कुछ समय के बाद ताला लगा मुद्दों हस्तक्षेप करने के लिए शुरू कर रहे हैं:
SQLSTATE[40001]: Serialization failure: 1213 Deadlock found when trying to get lock; try restarting transaction
और
'RuntimeException' with message 'Can't swap PDO instance while within transaction.'
और
SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction
मैं अभी तक एक और कतार चालक उपयोग करने की कोशिश नहीं की है। हालांकि मैं वास्तव में डेटाबेस के साथ रहना चाहूंगा। इंजन InnoDB है, नौकरियों की तालिका में डिफ़ॉल्ट संरचना और अनुक्रमणिका हैं।
क्या इस मुद्दे को हल करने का कोई तरीका है? आपके क्या विचार हैं?
यह उल्लेखनीय हो सकता है कि मैं अपने नौकरी कक्षाओं के अंदर DB::reconnect()
पर कॉल करता हूं क्योंकि कतार श्रमिक डेमॉन के रूप में चल रहे हैं।
नौकरियों को DispatchesJobs
विशेषता का उपयोग करके प्रेषित किया जाता है जैसा कि कोई उम्मीद करेगा। मैं किसी भी अन्य तरीके से कतार एल्गोरिदम में हस्तक्षेप नहीं करता हूं।
इस के लिए कोई समाधान? –
नहीं। अब के लिए beanstalkd के लिए ले जाया गया। हालांकि मुझे डीबी ड्राइवर बेहतर पसंद आया क्योंकि मैं नौकरियों को ट्रैक कर सकता था और डीबी टेबल को देखकर नौकरियों में असफल रहा ... – MaGnetas
अध्ययन करें कि लैरावेल माईएसक्यूएल के "लेन-देन" से कैसे निपटता है। ऐसा लगता है कि आपने एक लेनदेन शुरू कर दिया है, फिर लंबे समय तक बैठ गया। व्यावहारिक के रूप में जल्द ही 'COMMIT' लेनदेन। 'Autocommit' के उपयोग की जांच करें। –