@Override public void connectionFailed( final ActiveMQException me, boolean failedOver, String scaleDownTargetNodeID) { ActiveMQServerLogger.LOGGER.bridgeConnectionFailed(failedOver); synchronized (connectionGuard) { keepConnecting = true; } try { if (producer != null) { producer.close(); } cleanUpSessionFactory(csf); } catch (Throwable dontCare) { } try { session.cleanUp(false); } catch (Throwable dontCare) { } if (scaleDownTargetNodeID != null && !scaleDownTargetNodeID.equals(nodeUUID.toString())) { synchronized (this) { try { logger.debug( "Moving " + queue.getMessageCount() + " messages from " + queue.getName() + " to " + scaleDownTargetNodeID); ((QueueImpl) queue) .moveReferencesBetweenSnFQueues(SimpleString.toSimpleString(scaleDownTargetNodeID)); // stop the bridge from trying to reconnect and clean up all the bindings fail(true); } catch (Exception e) { ActiveMQServerLogger.LOGGER.warn(e.getMessage(), e); } } } else if (scaleDownTargetNodeID != null) { // the disconnected node is scaling down to me, no need to reconnect to it logger.debug( "Received scaleDownTargetNodeID: " + scaleDownTargetNodeID + "; cancelling reconnect."); fail(true); } else { logger.debug("Received invalid scaleDownTargetNodeID: " + scaleDownTargetNodeID); fail(me.getType() == ActiveMQExceptionType.DISCONNECTED); } tryScheduleRetryReconnect(me.getType()); }
protected void scheduleRetryConnectFixedTimeout(final long milliseconds) { try { cleanUpSessionFactory(csf); } catch (Throwable ignored) { } if (stopping) return; if (logger.isDebugEnabled()) { logger.debug( "Scheduling retry for bridge " + this.name + " in " + milliseconds + " milliseconds"); } futureScheduledReconnection = scheduledExecutor.schedule( new FutureConnectRunnable(executor, this), milliseconds, TimeUnit.MILLISECONDS); }