सिर्फ इसलिए कि आप इसका मतलब यह नहीं कर सकते कि आपको चाहिए। ऐसा करने के बेहतर तरीके हैं। इसे सीधे पीएल से न करें। यदि आप मेरी चेतावनियों को नज़रअंदाज़ करना चाहते हैं, तो PL/PerlU का उपयोग करें और इसे ऐसे लिखें जैसे आप किसी अन्य ईमेल क्लाइंट के लिए करेंगे। आप अपनी पसंद के किसी भी सीपीएएन मॉड्यूल का उपयोग कर सकते हैं जो आपके जीवन को आसान बनाता है।
नहीं करने के दो कारण:
1) क्या होगा यदि आपका लेन-देन बंद/रोल बैक हो जाता है? आपने ईमेल भेजा है लेकिन डीबी में कोई संगत परिवर्तन नहीं किया है। आप लेन-देन के अंदर गैर-लेन-देन संबंधी चीज़ें कर रहे हैं।
2) क्या होगा यदि आपका ईमेल 2 मिनट के बाद एक टीसीपी टाइमआउट प्राप्त होने तक प्रतिक्रिया के लिए प्रतीक्षा कर रहा है? क्या आप ग्राहक को ईमेल करना भूल जाएंगे? लेन-देन को रोकें (ईमेल नहीं भेज सकते, यह नहीं कह सकते कि हमने हिस्सा भेज दिया है!)?
यह एक खराब है विचार। मत करो। इस त्रुटि के लिए PostgreSQL का धन्यवाद करें और इसे दूसरे डेमॉन में स्थानांतरित करें।
एक बहुत बेहतर दृष्टिकोण LISTEN और NOTIFY, और क्यू टेबल का उपयोग करना है। फिर आप इस तरह एक टेबल बना सकते हैं:
CREATE TABLE email_queue (
id serial not null unique,
email_from text,
email_to text not null,
body text not null
);
CREATE FUNCTION email_queue_trigger() RETURNS TRIGGER
LANGUAGE PLPGSQL AS $F$
BEGIN
NOTIFY emails_waiting;
END;
$F$;
फिर अपनी संग्रहीत कार्यविधि को उस तालिका में सम्मिलित करें।
फिर, एक दूसरा क्लाइंट ऐप है जो ईमेल पर सुनता है_वेटिंग सुनता है (एसक्यूएल स्टेटमेंट LISTEN emails_waiting
) और फिर निम्नानुसार करता है:
- जांचता है कि ईमेल_क्यू में रिकॉर्ड हैं या नहीं। अगर नहीं 3 पर जाएं।
- डेटा पढ़ता है, ईमेल भेजता है, रिकॉर्ड हटाता है और प्रतिबद्ध करता है।
- जब कतार खाली होती है तो x सेकंड के लिए सो जाती है
- जागने पर, async की जांच करता है। सूचनाएं (क्लाइंट पुस्तकालयों पर निर्भर करता है, दस्तावेज़ों की जांच करें)। अगर हैं तो 1 पर जाएं, अगर नहीं तो 3 पर जाएं।
यह आपके ईमेल को आपके लेन-देन में भेजने के लिए कतारबद्ध होने की अनुमति देता है और इसके लिए स्वचालित रूप से किसी अन्य एप्लिकेशन को पास किया जा सकता है जो आपकी पसंद के बाद एमटीए से जुड़ सकता है।
वह दूसरा क्लाइंट ऐप आपकी पसंद की भाषा में लिखा जा सकता है, जो भी टूल आप जानते हैं उसका उपयोग करके। लेन-देन से बाहर सभी नेटवर्क सामग्री करने का इसका फायदा है, इसलिए यदि आप दूसरे एसएमटीपी सर्वर के माध्यम से भेज रहे हैं, और कनेक्शन हैंग हो जाता है, तो आपका पूरा डेटाबेस लेनदेन 2 मिनट तक इंतजार नहीं करता है और लेनदेन को रद्द कर देता है। . इस प्रकार यह आवश्यकताओं में भविष्य में होने वाले परिवर्तनों के प्रति भी सुरक्षित है।