मैं खरगोश एमक 3.4.1 जावा क्लाइंट लाइब्रेरी का उपयोग कर रहा हूं और ऑटो रिकवरी तंत्र का काम नहीं कर पा रहा हूं।खरगोश एमक्यू: कनेक्शन रिकवरी तंत्र
यह कैसे मैं खरगोश MQ कनेक्शन कारखाना बनाने रहा है:
factory = new ConnectionFactory();
factory.setUsername(userName);
factory.setPassword(password);
factory.setVirtualHost(virtualHost);
factory.setAutomaticRecoveryEnabled(true);
factory.setNetworkRecoveryInterval(5);
factory.setRequestedHeartbeat(3);
संदेश के प्रकाशन के बाद, यदि मैं बंद खरगोश MQ दलाल और इसे फिर से लाने के लिए, मैं वसूली तंत्र में किक करने की उम्मीद और कनेक्शन 'sane' स्थिति में बहाल किया गया है। लेकिन मुझे नीचे त्रुटि मिलती है:
com.rabbitmq.client.AlreadyClosedException: connection is already closed due to connection error; protocol method: #method<connection.close>(reply-code=320, reply-text=CONNECTION_FORCED - broker forced connection closure with reason 'shutdown', class-id=0, method-id=0)
at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:190) ~[amqp-client-3.4.1.jar:na]
at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:291) ~[amqp-client-3.4.1.jar:na]
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:654) ~[amqp-client-3.4.1.jar:na]
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:631) ~[amqp-client-3.4.1.jar:na]
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:622) ~[amqp-client-3.4.1.jar:na]
क्या मुझे यहां कुछ याद आ रही है? इस समस्या के आसपास काम करने का एकमात्र तरीका शटडाउन लिस्टर को पंजीकृत करना और खरगोश एमक कनेक्शन फैक्ट्री, कनेक्शन और चैनलों को फिर से शुरू करना है।
इसके अलावा
"chrislott"
टिप्पणी जवाब देने के लिए, मैं ऑटो वसूली ठीक करने के लिए में लात देखते हैं। मैं एक अस्थायी चैनल का उपयोग करके एक विनिमय बनाएँ:
Channel channel = connection.createChannel();
channel.exchangeDeclare(exchangeName, exchangeType, durable);
channel.close();
और मैं नीचे अपवाद जब इसकी टोपोलॉजी को ठीक करने की कोशिश कर देखें:
Caught an exception when recovering topology Caught an exception while recovering exchange testSuccessfulInitVirtualHost_Exchange: channel is already closed due to clean channel shutdown; protocol method: #method<channel.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0)
com.rabbitmq.client.TopologyRecoveryException: Caught an exception while recovering exchange testSuccessfulInitVirtualHost_Exchange: channel is already closed due to clean channel shutdown; protocol method: #method<channel.close>(reply-code=200, reply-text=OK, class-id=0, method-id=0)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.recoverExchanges(AutorecoveringConnection.java:482)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.recoverEntities(AutorecoveringConnection.java:467)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.beginAutomaticRecovery(AutorecoveringConnection.java:411)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection.access$000(AutorecoveringConnection.java:52)
at com.rabbitmq.client.impl.recovery.AutorecoveringConnection$1.shutdownCompleted(AutorecoveringConnection.java:351)
at com.rabbitmq.client.impl.ShutdownNotifierComponent.notifyListeners(ShutdownNotifierComponent.java:75)
at com.rabbitmq.client.impl.AMQConnection$MainLoop.run(AMQConnection.java:574)
ऊपर अपवाद नहीं देखा जाता है कि अगर मैं बंद नहीं करते चैनल जिसका उपयोग एक्सचेंज बनाने के लिए किया जाता है।
लेकिन मुझे पुनर्प्राप्ति के लिए ऑटो रिकवरी लात मार रही है। मैं एक अस्थायी चैनल का उपयोग करके एक एक्सचेंज बना देता हूं: चैनल चैनल = connection.createChannel(); channel.exchangeDeclare (एक्सचेंजनाम, एक्सचेंज टाइप, टिकाऊ); channel.close(); – user170008