2012-11-08 14 views
5

समाप्त न हो, मैं सी # .NET अनुप्रयोग के साथ RabbitMQ.Client (रनटाइम संस्करण v2.0.50727, संस्करण 2.8.1.0) का उपयोग करता हूं। अगर मैं इसे बंद आवेदन ठीक से, यह बस चैनल और कनेक्शन बंद कर देता हैखरगोश एमक्यू कनेक्शन बंद करें भले ही एप्लिकेशन गहराई से

using (IConnection connection = _factory.CreateConnection()) 
{ 
    using (IModel channel = connection.CreateModel()) 
    { 
     // code... 
    } 
} 

:

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

मुझे पता है कि मैं दिल की धड़कन का उपयोग कर सकता हूं लेकिन यह संभव है कि मेरे आवेदन को कुछ भी शुरू करने के लिए वास्तव में अधिक समय की आवश्यकता हो (खुले कनेक्शन के कई घंटे और उपयोग नहीं किया जा रहा है)। तो मुझे लगता है कि दिल की धड़कन सबसे अच्छी बात नहीं है।

मैं आरएमक्यू के लिए सभी खुले कनेक्शन कैसे बंद कर सकता हूं? (या, एक बेहतर आईपी के अपवाद के साथ, सभी खुले कनेक्शन भी बेहतर)?

सम्मान!

उत्तर

1

दिल की धड़कन की तरह लगता है आपका सबसे अच्छा समाधान है। मैंने अपने खरगोश एमक्यू ऐप्स को उसी कारण से दिल की धड़कन जोड़ दी (अपमानजनक शटडाउन)। इससे कोई फर्क नहीं पड़ता कि संदेशों के बीच समय का लंबा अंतर है, दिल की धड़कन सिर्फ यह सत्यापित करेगी कि दोनों पक्षों पर कनेक्शन अभी भी खुला है।

3

मुझे आपके जैसी ही समस्या का सामना करना पड़ा। मैंने उन कनेक्शन को बंद करने के लिए कई तरीकों की कोशिश की।

उन तरीकों से, कुछ काम केवल कुछ ही काम करते हैं। शायद आप कोशिश कर सकते हैं।

  1. कतारों को हटाने के लिए rabbitmqctl कमांड का उपयोग करें, फिर आरएमक्यू की प्रबंधन वेबसाइट कनेक्शन को बंद करें। इसका मतलब है कि वर्तमान खुली कतार 1 सेकंड (1000 मिलीसेकंड) के बाद समाप्त हो जाएगी। इस तरह सभी कतार हटा दी जाती हैं। फिर आप कनेक्शन बंद कर सकते हैं।

    कमान: "। *"

    rabbitmqctl set_policy समाप्ति '{ "समाप्त हो रहा है": 1000}' --apply-टू कतार

    कतार होने का समय लाइव नीति ->https://www.rabbitmq.com/ttl.html

    यह विधि आंशिक रूप से काम करती है।

  2. खोज के बाद, यह विचार है कि कारण हो सकता है मिल गया:

    वापसी एसीके इंतजार कर वापस अपने निर्माता है, यह नष्ट हो नहीं होगा तक आप एसीके स्वीकार करने के लिए काम समाप्त हो गया है भेजें।

  3. एब्रूपट तरीका। काम करता है। आरएमक्यू अपने डीबी मेनिस में कनेक्शन की जानकारी बचाता है।

    चरण 1: पहले rabbitmq-server को रोकें, और 'ps aux द्वारा rabbitmq thread को मार दें | grep rabbitmq 'अपने पिड को खोजने के लिए फिर सभी खरगोश धागे को मार डालो।

    आरएमक्यू डीबी मेन्सिया स्थान (1) खोजें।$> सीडी/var/lib/RabbitMQ/

    चरण 2: नाम बदलने "हटाएँ" करने के लिए एक और नाम फ़ाइल mensia (2)। $> Mv mensia mensia-बक

    चरण 3: पुनः आरंभ RabbitMQ-सर्वर

    तीसरे तरीके अब मेरे लिए काम करता है। यह सभी खुले कनेक्शन बंद कर सकते हैं।

0

मुझे वही समस्या थी जब मैं कंसोल में कार्यकर्ता खोलता हूं और इसे ctrl + c से रोकता हूं। प्रक्रिया बंद होने के बाद भी कनेक्शन अभी भी है और यह व्यवस्थापक पैनल में दिखाई देता है।

  • एक समाधान RabbitMQ व्यवस्थापक पैनल में कनेक्शन बंद करने के लिए
  • है या आप प्रक्रिया को मिल गया है और यह पुस्तिका sudo मार -9 पीआईडी ​​
  • मारने या एक कनेक्शन है जब आप खोलने दिल की धड़कन सेट कर सकते हैं [Dead TCP Connections]
पढ़ें