मैं एक डीबीए हूं, जिससे मेरी प्रतिक्रिया का स्वाद चखता है, लेकिन यहां मैं क्या करूंगा:
- यदि आप SQL 2005+ का उपयोग कर रहे हैं, तो संदेशों को किसी तालिका में संग्रहीत करने के बजाय डेटाबेस में संग्रहीत करने के लिए सेवा ब्रोकर का उपयोग करें। इससे आपको एक्यूइंग मैकेनिज्म मिलता है, जिससे आप एमएसएमक्यू से छुटकारा पा सकते हैं। आपके पास एक टेबल भी होगी, लेकिन यह केवल वार्तालाप हैंडल (अनिवार्य रूप से, संदेश के लिए एक सूचक) को संग्रहीत करने के साथ-साथ इस संदेश को कितनी बार करने का प्रयास करता है। अंत में, आप किसी प्रकार का "डेड लेटर बॉक्स" चाहते हैं, जहां आपके पुनः प्रयास की सीमा तक पहुंचने वाले संदेश जाते हैं।
- अपने संदेश संसाधन कोड में, निम्न कार्य करें:
- लेन-देन शुरू करें
- कतार से संदेश प्राप्त करें
- यदि पुन:प्रयास की संख्या सीमा से अधिक है, तो इसे डेड लेटर बॉक्स में ले जाएं और प्रतिबद्ध करें
- इस संदेश के लिए टेबल पर काउंटर बढ़ाएँ
- संदेश संसाधित करें
- अगर प्रोसेसिंग सफल हो जाती है, तो लेन-देन करें
- यदि प्रसंस्करण विफल हो जाता है, तो समान सामग्री के साथ एक नया संदेश कतार में रखें और फिर लेनदेन करें
ध्यान दें कि कोई नियोजित रोलबैक नहीं हैं। सर्विस ब्रोकर में रोलबैक खराब हो सकता है; यदि आप सफलतापूर्वक प्राप्त किए बिना 5 बार रोलबैक करते हैं, तो कतार संलग्न और डीक्यूइंग दोनों के लिए अक्षम हो जाएगी। लेकिन आप अभी भी उस मामले के लिए लेन-देन करना चाहते हैं जब आपका संदेश प्रोसेसर प्रसंस्करण के बीच में मर जाता है (यानी सर्वर क्रैश हो जाता है)।