यह बात का एक उदाहरण है, लेकिन चिह्नित जवाब क्या मुझे इस के लिए नेतृत्व है।
var factory = new ConnectionFactory
{
HostName = "MY_HOST_NAME",
UserName = "USERNAME",
Password = "PASSWORD",
RequestedHeartbeat = 30
};
using (var connection = factory.CreateConnection())
{
connection.ConnectionShutdown += (o, e) =>
{
//handle disconnect
};
using (var model = connection.CreateModel())
{
model.ExchangeDeclare(EXCHANGE_NAME, "topic");
var queueName = model.QueueDeclare();
model.QueueBind(queueName, EXCHANGE_NAME, "#");
var consumer = new QueueingBasicConsumer(model);
model.BasicConsume(queueName, true, consumer);
while (!stop)
{
BasicDeliverEventArgs args;
consumer.Queue.Dequeue(5000, out args);
if (stop) return;
if (args == null) continue;
if (args.Body.Length == 0) continue;
Task.Factory.StartNew(() =>
{
//Do work here on different thread then this one
}, TaskCreationOptions.PreferFairness);
}
}
}
इस बारे में कुछ बातें ध्यान दें।
मैं इस विषय के लिए # उपयोग कर रहा हूं। यह सब कुछ पकड़ लेता है। आमतौर पर आप किसी विषय से सीमित करना चाहते हैं।
मैं प्रक्रिया को समाप्त होने पर निर्धारित करने के लिए "स्टॉप" नामक एक चर सेट कर रहा हूं। आप देखेंगे कि लूप हमेशा के लिए चलता है जब तक कि चर सही नहीं है।
डेक्यू 5 सेकंड तक प्रतीक्षा करता है तो कोई नया संदेश नहीं होने पर डेटा प्राप्त किए बिना छोड़ देता है। यह सुनिश्चित करना है कि हम उस स्टॉप वैरिएबल को सुनें और वास्तव में किसी बिंदु पर छोड़ दें। मूल्य को अपनी पसंद में बदलें।
जब कोई संदेश आता है तो मैं एक नए थ्रेड पर हैंडलिंग कोड उत्पन्न करता हूं। वर्तमान धागा को खरगोश संदेशों को सुनने के लिए आरक्षित किया जा रहा है और यदि एक हैंडलर को संसाधित करने में बहुत लंबा समय लगता है तो मैं नहीं चाहता कि यह अन्य संदेशों को धीमा कर दे। आपके कार्यान्वयन के आधार पर आपको इसकी आवश्यकता हो सकती है या नहीं। हालांकि संदेशों को संभालने के लिए कोड लिखना सावधान रहें। यदि इसे चलाने में एक मिनट लगते हैं और आपके दूसरे संदेश उप-दूसरे बार प्राप्त होते हैं तो आप स्मृति से बाहर या कम से कम गंभीर प्रदर्शन समस्याओं में भाग लेंगे।
आप कनेक्शन में दिल की धड़कन जोड़ सकते हैं जो सेवा इंटरप्शन का पता लगाएगा – robthewolf
क्या आप अपना पूरा कोड पोस्ट कर सकते हैं? मुझे एक ही समस्या का सामना करना पड़ रहा है। अग्रिम में धन्यवाद। – Pritam
आपको वास्तव में 3 चीजों की आवश्यकता है। 1 कनेक्शन फैक्टरी को एक अनुरोधित हार्टबीट सेट करने की आवश्यकता है। 2 कनेक्शन बनाने के बाद कनेक्शन को चिह्नित उत्तर में वर्णित कनेक्शनशूटडाउन ईवेंट को परिभाषित करें। 3 सुनिश्चित करें कि आपने rabbitmq कॉन्फ़िगरेशन फ़ाइल में इसे सही तरीके से सेटअप किया है। (क्षमा करें मेरे पास वर्तमान में उस हिस्से का हिस्सा नहीं है।) मैं देखूंगा कि क्या मैं बिना किसी कार्यान्वयन विशिष्ट सामग्री के कोड को निकाल सकता हूं। – Kelly