/ / लेनदेन और एक ईमेल भेजना - जावा, वसंत, ईमेल, लेनदेन

लेनदेन और एक ईमेल भेजना - जावा, वसंत, ईमेल, लेनदेन

उपयोगकर्ता के सामान्य उपयोग के मामले को देखते हुएएक वेब एप्लिकेशन और उपयोगकर्ता के पते पर एक पुष्टिकरण ईमेल भेजने वाले एप्लिकेशन पर एक नया खाता बनाना। मैंने जो देखा है, यह आमतौर पर 3 तरीकों में से एक में लागू होता है:

  1. वेब नियंत्रक एक सेवा पद्धति कहता है, जो उपयोगकर्ता खाता बनाता है और ईमेल भेजता है, दोनों एक ही लेनदेन के भीतर।
  2. वेब नियंत्रक एक सेवा पद्धति (के साथ) कहता हैtx का प्रसार = कभी नहीं), जो एक लेन-देन के भीतर उपयोगकर्ता खाता बनाने के लिए स्वयं पर एक 1 विधि को आमंत्रित करता है, और फिर ईमेल भेजने के लिए अपने आप पर एक 2 विधि लागू करता है।
  3. वेब नियंत्रक एक 1 सेवा विधि को कॉल करता है, जो उपयोगकर्ता को लेनदेन के भीतर बनाता है, फिर एक 2 सेवा पद्धति जो ईमेल भेजती है।

1 दृष्टिकोण सरल और सीधा है,लेकिन एक जोखिम यह भी है कि ईमेल भेजे जाने के बाद लेनदेन वापस हो जाता है, जिससे ईमेल अमान्य हो जाता है। दूसरा दृष्टिकोण अधिक जटिल है, लेकिन यह गारंटी देता है कि ईमेल केवल तभी भेजा जाता है जब उपयोगकर्ता निर्माण वास्तव में सफल हुआ हो। तीसरा दृष्टिकोण सरल है लेकिन व्यापार तर्क के साथ वेब परत पर बोझ है कि इसे जानने की जरूरत नहीं है।

एक सरल दृष्टिकोण नहीं है, शायद AOP- संचालित,यह गारंटी देता है कि ईमेल तभी भेजा जाएगा जब उपयोगकर्ता निर्माण लेनदेन वास्तव में सफल हो गया हो? क्या मैं यह सोचकर पागल हो गया हूं कि प्रथम दृष्टिकोण विफल हो सकता है?

हम जावा ईई + स्प्रिंग स्टैक का उपयोग कर रहे हैं और इसे प्राप्त करने के लिए अतिरिक्त एपीआई (एओपी? स्प्रिंग इंटीग्रेशन?) को एकीकृत करने के लिए तैयार हैं।

चीयर्स!

उत्तर:

उत्तर № 1 के लिए 6

एक अन्य विकल्प जो मैं वर्तमान में इस समस्या को हल करने के लिए उपयोग कर रहा हूं:

http://download.oracle.com/javaee/6/api/javax/transaction/Synchronization.html


जवाब के लिए 5 № 2

ईमेल भेजने के लिए, कतार का उपयोग करने की अनुशंसा की जाती हैऔर हर 5 या 15 मिनट में ईमेल भेजने का समय निर्धारित करें। लेन-देन के भीतर, डेटाबेस में कतार संग्रहीत की जाएगी। फिर नियमित अंतराल पर उस कतार से ईमेल भेजने के लिए एक प्रक्रिया निर्धारित करें।

इसका एकमात्र तरीका मुझे यह सुनिश्चित करने के लिए मिला कि ईमेल केवल तभी भेजा जाता है जब लेन-देन को कम किया जाता है और शुरू किया जाता है, क्योंकि परिभाषा द्वारा ईमेल किसी भी तरह के डेटाबेस लेनदेन से बंधा नहीं है।


जवाब के लिए 0 № 3

मैं ईमेल के लिए ActiveMQ जैसी एक हल्की JMS परत जोड़ूंगा, यह स्प्रिंग के साथ सेटअप और इंटीग्रेट (और यहां तक ​​कि एम्बेड) के लिए बहुत आसान है। फिर आपके पास है

1) उपयोगकर्ता निर्माण लेनदेन और जेएमएस संदेश 1 लेनदेन में हो रहा है। यदि आप या तो विफल रहते हैं तो फिर भी एक अच्छी स्थिति में (दोनों कमिट या रोलबैक और आप उपयोगकर्ता के लिए एक त्रुटि प्रस्तुत करते हैं)

2) यदि JMS उपभोक्ता ईमेल भेजने में विफल रहता है तो आप कुछ समय के लिए पुनः प्रयास करने के लिए JMS कतार को सेटअप कर सकते हैं और आपके पास अपने ईमेल सिस्टम के साथ क्षणिक समस्याओं के प्रबंधन के लिए एक बेहतर समाधान होगा।


जवाब के लिए 0 № 4

डेटाबेस तालिका के साथ कतारबद्ध करना और क्वार्ट्ज के साथ शेड्यूलिंग प्रोग्राम चलाना या कुछ ऐसा करना जो उचित हो और जिसे लागू करना आसान हो।

यह उन लोगों के लिए RabbitMQ का उपयोग करने के लिए भी अच्छा विचार हैसुविधा का विकास। RabbitMQ को कॉन्फ़िगर करना काफी आसान है और इसे इंटरव्यू बिटकॉइन सिस्टम के पब्लिश / सब्सक्राइब के लिए सबसे ज्यादा इस्तेमाल किया जा सकता है, भले ही आपको एप्लिकेशन लेवल ack और छोटे ऐप्स को लागू करने की आवश्यकता हो सकती है जो RabbitMQ के मैसेज सब्सक्राइब करते हैं और SMTP से ईमेल भेजते हैं।

यह ओवरकिल लग सकता है, लेकिन आप इस # 2 का उपयोग कर सकते हैंभविष्य में ईमेल भेजने के लिए आवश्यक हर प्रणाली का समाधान। आप अभी भी इसके लिए डेटाबेस कतार आधारित मॉडल का उपयोग कर सकते हैं, लेकिन इमेल भेजने के लिए महंगे डेटाबेस cpu / संसाधनों का उपयोग करेंगे।