org.apache.activemq.network.jms.ReconnectionPolicy Maven / Gradle / Ivy
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.network.jms;
/**
* A policy object that defines how a {@link JmsConnector} deals with
* reconnection of the local and foreign connections.
*
* @org.apache.xbean.XBean element="reconnectionPolicy"
*/
public class ReconnectionPolicy {
public static final int INFINITE = -1;
private int maxSendRetries = 10;
private long sendRetryDelay = 1000L;
private int maxReconnectAttempts = INFINITE;
private int maxInitialConnectAttempts = INFINITE;
private long maximumReconnectDelay = 30000;
private long initialReconnectDelay = 1000L;
private boolean useExponentialBackOff = false;
private double backOffMultiplier = 2.0;
/**
* Gets the maximum number of a times a Message send should be retried before
* a JMSExeception is thrown indicating that the operation failed.
*
* @return number of send retries that will be performed.
*/
public int getMaxSendRetries() {
return maxSendRetries;
}
/**
* Sets the maximum number of a times a Message send should be retried before
* a JMSExeception is thrown indicating that the operation failed.
*
* @param maxSendRetries
* number of send retries that will be performed.
*/
public void setMaxSendRetries(int maxSendRetries) {
this.maxSendRetries = maxSendRetries;
}
/**
* Get the amount of time the DestionationBridge will wait between attempts
* to forward a message.
*
* @return time in milliseconds to wait between send attempts.
*/
public long getSendRetryDelay() {
return this.sendRetryDelay;
}
/**
* Set the amount of time the DestionationBridge will wait between attempts
* to forward a message. The default policy limits the minimum time between
* send attempt to one second.
*
* @param sendRetryDelay
* Time in milliseconds to wait before attempting another send.
*/
public void setSendRetyDelay(long sendRetryDelay) {
if (sendRetryDelay < 1000L) {
this.sendRetryDelay = 1000L;
}
this.sendRetryDelay = sendRetryDelay;
}
/**
* Gets the number of time that {@link JmsConnector} will attempt to connect
* or reconnect before giving up. By default the policy sets this value to
* a negative value meaning try forever.
*
* @return the number of attempts to connect before giving up.
*/
public int getMaxReconnectAttempts() {
return maxReconnectAttempts;
}
/**
* Sets the number of time that {@link JmsConnector} will attempt to connect
* or reconnect before giving up. By default the policy sets this value to
* a negative value meaning try forever, set to a positive value to retry a
* fixed number of times, or zero to never try and reconnect.
*
* @param maxReconnectAttempts
*/
public void setMaxReconnectAttempts(int maxReconnectAttempts) {
this.maxReconnectAttempts = maxReconnectAttempts;
}
/**
* Gets the maximum number of times that the {@link JmsConnector} will try
* to connect on startup to before it marks itself as failed and does not
* try any further connections.
*
* @returns the max number of times a connection attempt is made before failing.
*/
public int getMaxInitialConnectAttempts() {
return this.maxInitialConnectAttempts;
}
/**
* Sets the maximum number of times that the {@link JmsConnector} will try
* to connect on startup to before it marks itself as failed and does not
* try any further connections.
*
* @param maxAttempts
* The max number of times a connection attempt is made before failing.
*/
public void setMaxInitialConnectAttempts(int maxAttempts) {
this.maxInitialConnectAttempts = maxAttempts;
}
/**
* Gets the maximum delay that is inserted between each attempt to connect
* before another attempt is made. The default setting for this value is
* 30 seconds.
*
* @return the max delay between connection attempts in milliseconds.
*/
public long getMaximumReconnectDelay() {
return maximumReconnectDelay;
}
/**
* Sets the maximum delay that is inserted between each attempt to connect
* before another attempt is made.
*
* @param maximumReconnectDelay
* The maximum delay between connection attempts in milliseconds.
*/
public void setMaximumReconnectDelay(long maximumReconnectDelay) {
this.maximumReconnectDelay = maximumReconnectDelay;
}
/**
* Gets the initial delay value used before a reconnection attempt is made. If the
* use exponential back-off value is set to false then this will be the fixed time
* between connection attempts. By default this value is set to one second.
*
* @return time in milliseconds that will be used between connection retries.
*/
public long getInitialReconnectDelay() {
return initialReconnectDelay;
}
/**
* Gets the initial delay value used before a reconnection attempt is made. If the
* use exponential back-off value is set to false then this will be the fixed time
* between connection attempts. By default this value is set to one second.
* @param initialReconnectDelay
* Time in milliseconds to wait before the first reconnection attempt.
*/
public void setInitialReconnectDelay(long initialReconnectDelay) {
this.initialReconnectDelay = initialReconnectDelay;
}
/**
* Gets whether the policy uses the set back-off multiplier to grow the time between
* connection attempts.
*
* @return true if the policy will grow the time between connection attempts.
*/
public boolean isUseExponentialBackOff() {
return useExponentialBackOff;
}
/**
* Sets whether the policy uses the set back-off multiplier to grow the time between
* connection attempts.
*
* @param useExponentialBackOff
*/
public void setUseExponentialBackOff(boolean useExponentialBackOff) {
this.useExponentialBackOff = useExponentialBackOff;
}
/**
* Gets the multiplier used to grow the delay between connection attempts from the initial
* time to the max set time. By default this value is set to 2.0.
*
* @return the currently configured connection delay multiplier.
*/
public double getBackOffMultiplier() {
return backOffMultiplier;
}
/**
* Gets the multiplier used to grow the delay between connection attempts from the initial
* time to the max set time. By default this value is set to 2.0.
*
* @param backOffMultiplier
* The multiplier value used to grow the reconnection delay.
*/
public void setBackOffMultiplier(double backOffMultiplier) {
this.backOffMultiplier = backOffMultiplier;
}
/**
* Returns the next computed delay value that the connection controller should use to
* wait before attempting another connection for the {@link JmsConnector}.
*
* @param attempt
* The current connection attempt.
*
* @return the next delay amount in milliseconds.
*/
public long getNextDelay(int attempt) {
if (attempt == 0) {
return 0;
}
long nextDelay = initialReconnectDelay;
if (useExponentialBackOff) {
nextDelay = Math.max(initialReconnectDelay, nextDelay * (long)((attempt - 1) * backOffMultiplier));
}
if (maximumReconnectDelay > 0 && nextDelay > maximumReconnectDelay) {
nextDelay = maximumReconnectDelay;
}
return nextDelay;
}
}