Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [microprofile-dev] Question about priority order of Fault Tolerance annotations.


Dear Emily-san

Thank you so much for your reply and explanations.
It seems that the @Timeout is the higher priority than @Retry and @CircuitBreaker.

And yes, I assume that the spec is a little bit unclear for me to understand. (I may raise an issue after the conversation.)
So could you let me know more detail with sample scenario?

For example, if I wrote following code, how to behave?

Senario 1

----------------------------------------------
@Timeout(400)
@Retry(6)
@CircuitBreaker(successThreshold = 5, requestVolumeThreshold = 6, failureRatio=0.5, delay = 1000)
@Bulkhead(5)
@Fallback(fallbackMethod= "fallbackForServiceB")
public void foo(){

}

Priority Order is following?
----------------
1. Timeout (400ms)
2. Retry

3. Timeout (400ms)
4. Retry

5. Timeout (400ms)
6. CircuitBreaker Open (requestVolumeThreshold * failureRatio)

7. Retry
8. Fallback (fallbackForServiceB method is invoked due to CircuitBreaker)
----------------

How to check the Buildhead? (In the above scenario connection is one? (If @Asyncronous is added, is it counted as multiple request?)

Thank you so much & Best Regards.

Yoshio.

On 2020/03/19 8:11, Emily Jiang wrote:
Hi Yoshio,



However I couldn't understand the priority between the above three
annotations(@Timeout, @Retry and @CircuitBreaker).

Each Retry might trigger TimeOut and might count towards CircuitBreaker.
Spec says:
If @Retry is used with @CircuitBreaker, each retry attempt is processed by the circuit breaker and recorded as either a success or a failure. If a CircuitBreakerOpenException is thrown, the execution may be retried, depending on how the @Retry is configured.

If @Timeout is used with @Retry, a TimeoutException may trigger a retry, depending on the values of retryOn and abortOn of the @Retry annotation. The timeout is restarted for each retry. If @Asynchronous is also used and the retry is the result of a TimeoutException, the retry starts after any delay period, even if the original attempt is still running.

If @Timeout is used with @CircuitBreaker, a TimeoutException may be counted as a failure by the circuit breaker and contribute towards opening the circuit, depending on the value of failOn on the @CircuitBreaker annotation.

 Please feel free to raise an issue (https://github.com/eclipse/microprofile-fault-tolerance) on Fault Tolerance repo if you think the spec is unclear.

Thanks
Emily


 

On Wed, Mar 18, 2020 at 10:48 PM Yoshio Terada <tyoshio2002@xxxxxxxxxxx> wrote:
Dear my all friends.

I would like to ask you one question about MicroProfile Fault Tolerance.
Now I'm creating the explanation by Japanese as follows.
https://dev.to/azure/microprofile-fault-tolerance-1a6g

In fact, there is some annotations for Fault Tolerance and it is useful.

According to the specification, "@Fallback" will be invoke after all of
the evaluation of other annotations like @Timeout, @Retry and
@CircuitBreaker.

However I couldn't understand the priority between the above three
annotations(@Timeout, @Retry and @CircuitBreaker).

Is there a priority of the above three annotations?
Or will it be evaluated individual by parallel?

If it is possible, could you let me know the specification of the
priority order between the three annotations?

Thank you so much & Best Regards.

Yoshio.

_______________________________________________
microprofile-dev mailing list
microprofile-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/microprofile-dev


--
Thanks
Emily


_______________________________________________
microprofile-dev mailing list
microprofile-dev@xxxxxxxxxxx
To unsubscribe from this list, visit https://www.eclipse.org/mailman/listinfo/microprofile-dev

Back to the top