blob: dc409ba9610b1263c5164cbc8138cb906667ddbe [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<title>CircuitBreaker</title>
<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../script.js"></script>
<link rel="shortcut icon" href="/img/microprofile-favicon.png">
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="CircuitBreaker";
}
}
catch(err) {
}
//-->
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/eclipse/microprofile/faulttolerance/Bulkhead.html" title="annotation in org.eclipse.microprofile.faulttolerance"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/eclipse/microprofile/faulttolerance/ExecutionContext.html" title="interface in org.eclipse.microprofile.faulttolerance"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/eclipse/microprofile/faulttolerance/CircuitBreaker.html" target="_top">Frames</a></li>
<li><a href="CircuitBreaker.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.element.detail">Element</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.eclipse.microprofile.faulttolerance</div>
<h2 title="Annotation Type CircuitBreaker" class="title">Annotation Type CircuitBreaker</h2>
</div>
<div class="contentContainer">
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>@Inherited
@Retention(value=RUNTIME)
@Documented
@Target(value={METHOD,TYPE})
public @interface <span class="memberNameLabel">CircuitBreaker</span></pre>
<div class="block">Defines a circuit breaker policy to an individual method or a class.
<p>
A circuit breaker aims to prevent further damage by not executing functionality that is doomed to fail. After a
failure situation has been detected, circuit breakers prevent methods from being executed and instead throw
exceptions immediately. After a certain delay or wait time, the functionality is attempted to be executed again.
<p>
A circuit breaker can be in one of the following states:
<ul>
<li><i>Closed:</i> In normal operation, the circuit is closed. If a failure occurs, the Circuit Breaker records the
event. In closed state the <code>requestVolumeThreshold</code> and <code>failureRatio</code> parameters may be configured in
order to specify the conditions under which the breaker will transition the circuit to open. If the failure
conditions are met, the circuit will be opened.</li>
<li><i>Open:</i> When the circuit is open, calls to the service operating under the circuit breaker will fail
immediately. A delay may be configured for the circuit breaker. After the specified delay, the circuit transitions to
half-open state.</li>
<li><i>Half-open:</i> In half-open state, trial executions of the service are allowed. By default one trial call to
the service is permitted. If the call fails, the circuit will return to open state. The <code>successThreshold</code>
parameter allows the configuration of the number of trial executions that must succeed before the circuit can be
closed. After the specified number of successful executions, the circuit will be closed. If a failure occurs before
the successThreshold is reached the circuit will transition to open.</li>
</ul>
Circuit state transitions will reset the circuit breaker's records.
<p>
When a method returns a result, the following rules are applied to determine whether the result is a success or a
failure:
<ul>
<li>If the method does not throw a <code>Throwable</code>, it is considered a success
<li>Otherwise, if the thrown object is assignable to any value in the <a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#skipOn--"><code>skipOn()</code></a> parameter, it is considered a
success
<li>Otherwise, if the thrown object is assignable to any value in the <a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#failOn--"><code>failOn()</code></a> parameter, it is considered a
failure
<li>Otherwise it is considered a success
</ul>
If a method throws a <code>Throwable</code> which is not an <code>Error</code> or <code>Exception</code>, non-portable behavior
results.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#failOn--"><code>failOn()</code></a>,
<a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#skipOn--"><code>skipOn()</code></a>,
<a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#delay--"><code>delay()</code></a>,
<a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#delayUnit--"><code>delayUnit()</code></a>,
<a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#requestVolumeThreshold--"><code>requestVolumeThreshold()</code></a>,
<a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#failureRatio--"><code>failureRatio()</code></a>,
<a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#successThreshold--"><code>successThreshold()</code></a></dd>
<dt><span class="simpleTagLabel">Examples (en):</span></dt>
<dd><a href="../../../../../../../tomee-9.0/examples/mp-faulttolerance-fallback.html">mp-faulttolerance-fallback</a></dd>
<dt><span class="simpleTagLabel">Examples (es):</span></dt>
<dd><a href="../../../../../../../tomee-9.0/es/examples/mp-faulttolerance-fallback.html">mp-faulttolerance-fallback</a></dd>
<dt><span class="simpleTagLabel">Examples (pt):</span></dt>
<dd><a href="../../../../../../../tomee-9.0/pt/examples/mp-faulttolerance-fallback.html">mp-faulttolerance-fallback</a></dd>
</dl>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== ANNOTATION TYPE OPTIONAL MEMBER SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="annotation.type.optional.element.summary">
<!-- -->
</a>
<h3>Optional Element Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Optional Element Summary table, listing optional elements, and an explanation">
<caption><span>Optional Elements</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Optional Element and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#delay--">delay</a></span></code>
<div class="block">The delay after which an open circuit will transitions to half-open state.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.time.temporal.ChronoUnit</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#delayUnit--">delayUnit</a></span></code>
<div class="block">The unit of the delay after which an open circuit will transitions to half-open state.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>java.lang.Class&lt;? extends java.lang.Throwable&gt;[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#failOn--">failOn</a></span></code>
<div class="block">The list of exception types which should be considered failures.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>double</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#failureRatio--">failureRatio</a></span></code>
<div class="block">The ratio of failures within the rolling window that will trip the circuit to open.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#requestVolumeThreshold--">requestVolumeThreshold</a></span></code>
<div class="block">The number of consecutive requests in a rolling window.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>java.lang.Class&lt;? extends java.lang.Throwable&gt;[]</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#skipOn--">skipOn</a></span></code>
<div class="block">The list of exception types which should not be considered failures.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>int</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#successThreshold--">successThreshold</a></span></code>
<div class="block">The number of successful executions, before a half-open circuit is closed again.</div>
</td>
</tr>
</table>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="annotation.type.element.detail">
<!-- -->
</a>
<h3>Element Detail</h3>
<a name="failOn--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>failOn</h4>
<pre>public abstract&nbsp;java.lang.Class&lt;? extends java.lang.Throwable&gt;[]&nbsp;failOn</pre>
<div class="block">The list of exception types which should be considered failures.
<p>
Note that if a method throws a <code>Throwable</code> which is not an <code>Error</code> or <code>Exception</code>, non-portable
behavior results.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the exception types which should be considered failures</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>java.lang.Throwable.class</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="skipOn--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>skipOn</h4>
<pre>public abstract&nbsp;java.lang.Class&lt;? extends java.lang.Throwable&gt;[]&nbsp;skipOn</pre>
<div class="block">The list of exception types which should not be considered failures.
<p>
This list takes priority over the types listed in <a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#failOn--"><code>failOn()</code></a>.
<p>
Note that if a method throws a <code>Throwable</code> which is not an <code>Error</code> or <code>Exception</code>, non-portable
behavior results.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the exception types which should not be considered failures</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>{}</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="delay--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>delay</h4>
<pre>public abstract&nbsp;long&nbsp;delay</pre>
<div class="block">The delay after which an open circuit will transitions to half-open state.
<p>
The amount of delay is taken from this delay value and the <code>delayUnit</code>, and defaults to five seconds. The
value must be greater than or equal to <code>0</code>. <code>0</code> means no delay.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the delay time after which an open circuit transitions to half-open state</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>5000L</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="delayUnit--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>delayUnit</h4>
<pre>public abstract&nbsp;java.time.temporal.ChronoUnit&nbsp;delayUnit</pre>
<div class="block">The unit of the delay after which an open circuit will transitions to half-open state.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The unit of the delay</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../org/eclipse/microprofile/faulttolerance/CircuitBreaker.html#delay--"><code>delay()</code></a></dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>java.time.temporal.ChronoUnit.MILLIS</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="requestVolumeThreshold--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>requestVolumeThreshold</h4>
<pre>public abstract&nbsp;int&nbsp;requestVolumeThreshold</pre>
<div class="block">The number of consecutive requests in a rolling window.
<p>
The circuit breaker will trip if the number of failures exceed the <code>failureRatio</code> within the rolling window
of consecutive requests. The value must be greater than or equal to <code>1</code>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the number of the consecutive requests in a rolling window</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>20</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="failureRatio--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>failureRatio</h4>
<pre>public abstract&nbsp;double&nbsp;failureRatio</pre>
<div class="block">The ratio of failures within the rolling window that will trip the circuit to open.
<p>
The circuit breaker will trip if the number of failures exceed the <code>failureRatio</code> within the rolling window
of consecutive requests. For example, if the <code>requestVolumeThreshold</code> is <code>20</code> and
<code>failureRatio</code> is <code>.50</code>, ten or more failures in 20 consecutive requests will trigger the circuit to
open. The value must be between <code>0</code> and <code>1</code> inclusive.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the failure ratio threshold</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>0.5</dd>
</dl>
</li>
</ul>
</li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="successThreshold--">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>successThreshold</h4>
<pre>public abstract&nbsp;int&nbsp;successThreshold</pre>
<div class="block">The number of successful executions, before a half-open circuit is closed again.
<p>
A half-open circuit will be closed once <code>successThreshold</code> executions were made without failures. If a
failure occurs while in half-open state the circuit is immediately opened again. The value must be greater than
or equal to <code>1</code>.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>the success threshold to fully close the circuit</dd>
</dl>
<dl>
<dt>Default:</dt>
<dd>1</dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../index-all.html">Index</a></li>
<li><a href="../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../org/eclipse/microprofile/faulttolerance/Bulkhead.html" title="annotation in org.eclipse.microprofile.faulttolerance"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../org/eclipse/microprofile/faulttolerance/ExecutionContext.html" title="interface in org.eclipse.microprofile.faulttolerance"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../index.html?org/eclipse/microprofile/faulttolerance/CircuitBreaker.html" target="_top">Frames</a></li>
<li><a href="CircuitBreaker.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Required&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.optional.element.summary">Optional</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#annotation.type.element.detail">Element</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>