org.apache.commons.lang3.concurrent.CircuitBreaker Maven / Gradle / Ivy
The newest version!
/*
* 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.commons.lang3.concurrent;
/**
* An interface describing a Circuit Breaker component.
*
*
* A circuit breaker can be used to protect an application against unreliable
* services or unexpected load. It typically monitors a specific resource. As long as this
* resource works as expected, it stays in state closed, meaning that the
* resource can be used. If problems are encountered when using the resource, the circuit
* breaker can switch into state open; then access to this resource is
* prohibited. Depending on a concrete implementation, it is possible that the circuit
* breaker switches back to state closed when the resource becomes available
* again.
*
*
* This interface defines a generic protocol of a circuit breaker component. It should be
* sufficiently generic to be applied to multiple different use cases.
*
*
* @param the type of the value monitored by this circuit breaker
* @since 3.5
*/
public interface CircuitBreaker {
/**
* Checks the state of this circuit breaker and changes it if necessary. The return
* value indicates whether the circuit breaker is now in state closed; a value
* of true typically means that the current operation can continue.
*
* @return true if the circuit breaker is now closed;
* false otherwise.
*/
boolean checkState();
/**
* Closes this circuit breaker. Its state is changed to closed. If this circuit
* breaker is already closed, this method has no effect.
*/
void close();
/**
* Increments the monitored value and performs a check of the current state of this
* circuit breaker. This method works like {@link #checkState()}, but the monitored
* value is incremented before the state check is performed.
*
* @param increment value to increment in the monitored value of the circuit breaker
* @return true if the circuit breaker is now closed;
* false otherwise
*/
boolean incrementAndCheckState(T increment);
/**
* Tests the current closed state of this circuit breaker. A return value of
* true means that the circuit breaker is currently closed. This
* means that everything is okay with the monitored subsystem.
*
* @return the current closed state of this circuit breaker.
*/
boolean isClosed();
/**
* Tests the current open state of this circuit breaker. A return value of
* true means that the circuit breaker is currently open indicating a
* problem in the monitored subsystem.
*
* @return the current open state of this circuit breaker.
*/
boolean isOpen();
/**
* Opens this circuit breaker. Its state is changed to open. Depending on a concrete
* implementation, it may close itself again if the monitored subsystem becomes
* available. If this circuit breaker is already open, this method has no effect.
*/
void open();
}