हमारे पास क्लोजर कोड है जो एक खरगोश कतार से पढ़ता है। हम उस मामले को बर्दाश्त करना चाहते हैं जहां RabbitMQ सर्वर संक्षिप्त रूप से नीचे है, उदा। पुनरारंभ करने के मामले में (sudo service rabbitmq-server restart
)।Langohr में RabbitMQ पुनरारंभ कैसे सहन करें?
लैंगोहर में some provision for reconnecting प्रतीत होता है। हमने उदाहरण clojurewerkz.langohr.examples.recovery.example1
(Gist here) को अनुकूलित किया। प्रकाशित उदाहरण बनाम थोड़ा अंतर बनाम कनेक्शन पैरामीटर, और lb/publish
कॉल को हटाने (क्योंकि हम बाहरी स्रोत के साथ डेटा भर रहे हैं) शामिल हैं।
हम सफलतापूर्वक कतार से डेटा का उपभोग कर सकते हैं और अधिक संदेशों की प्रतीक्षा कर सकते हैं। हालांकि, जब हम RMQ (वीएम होस्टिंग RabbitMQ पर ऊपर sudo
आदेश के माध्यम से) को पुनः आरंभ निम्न अपवादों के फेंक दिया जाता है:
Caught an exception during connection recovery!
java.io.IOException
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:106)
at com.rabbitmq.client.impl.AMQChannel.wrap(AMQChannel.java:102)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:378)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:545)
at com.novemberain.langohr.Connection.recoverConnection(Connection.java:166)
at com.novemberain.langohr.Connection.beginAutomaticRecovery(Connection.java:115)
at com.novemberain.langohr.Connection.access$000(Connection.java:18)
at com.novemberain.langohr.Connection$1.shutdownCompleted(Connection.java:93)
at com.rabbitmq.client.impl.ShutdownNotifierComponent.notifyListeners(ShutdownNotifierComponent.java:75)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:573)
Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.io.EOFException
at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67)
at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33)
at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343)
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:321)
... 8 more
Caused by: java.io.EOFException
at java.io.DataInputStream.readUnsignedByte(DataInputStream.java:273)
at com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
at com.rabbitmq.client.impl.SocketFrameHandler.readFrame(SocketFrameHandler.java:131)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:533)
यह संभावना है कि इरादा पुनः आरंभ तंत्र Langohr द्वारा प्रदान की टूट रहा है जब यह में लात मारता है लगता है। क्या कोई वैकल्पिक पैटर्न है जिसे इन "हार्ड" पुनरारंभ के मामले में प्राथमिकता दी जाती है? वैकल्पिक रूप से, मुझे लगता है कि हमें कनेक्शन निगरानी लागू करना है और खुद को पुनः प्रयास करना है। किसी भी सुझाव का स्वागत किया जाएगा।