package Ġreactor . retry Ċ Ċ import Ġreactor . core . publisher . Flux Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . time . Duration Ċ import Ġjava . util . function . Consumer Ċ Ċ /** Ċ Ġ* ĠExtension Ġto Ġadd Ġa Ġ[ Flux . repeat ] Ġvariant Ġto Ġ[ Flux ] Ġthat Ġuses Ġan Ġexponential Ġbackoff , Ċ Ġ* Ġas Ġenabled Ġby Ġreactor - extra 's Ġ[ Repeat ] Ġbuilder . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtimes Ġthe Ġmaximum Ġnumber Ġof Ġretry Ġattempts Ċ Ġ* Ġ@ param Ġfirst Ġthe Ġinitial Ġdelay Ġin Ġretry ing Ċ Ġ* Ġ@ param Ġmax Ġthe Ġoptional Ġupper Ġlimit Ġthe Ġdelay Ġcan Ġreach Ġafter Ġsubsequent Ġback offs Ċ Ġ* Ġ@ param Ġj itter Ġoptional Ġflag Ġto Ġactivate Ġrandom Ġj itter Ġin Ġthe Ġback offs Ċ Ġ* Ġ@ param Ġdo On Repeat Ġoptional Ġ[ Consumer ]- like Ġlambda Ġthat Ġwill Ġreceive Ġa Ġ[ Repeat Context ] Ċ Ġ* ĠĠ Ġeach Ġtime Ġan Ġattempt Ġis Ġmade . Ċ Ġ* Ċ Ġ* Ġ@ author ĠSimon ĠBas lÃ© Ċ Ġ* Ġ@ since Ġ 3 . 1 . 1 Ċ Ġ*/ Ċ fun Ġ< T > ĠFlux < T >. repeat Exponent ial Backoff ( times : ĠLong , Ġfirst : ĠDuration , Ġmax : ĠDuration ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj itter : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Repeat : Ġ(( Repeat Context < T >) Ġ-> ĠUnit )? Ġ= Ġnull ): ĠFlux < T > Ġ{ ĊĠĠĠ Ġval Ġrepeat Ġ= ĠRepeat . times < T >( times ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exponent ial Backoff ( first , Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. j itter ( if Ġ( j itter ) ĠJ itter . random () Ġelse ĠJ itter . no J itter ()) ĊĊĠĠĠ Ġreturn Ġif Ġ( do On Repeat Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġrepeat . apply ( this ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġrepeat . do On Repeat ( do On Repeat ). apply ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġto Ġadd Ġa Ġ[ Flux . repeat ] Ġvariant Ġto Ġ[ Flux ] Ġthat Ġuses Ġa Ġrandom ized Ġbackoff , Ċ Ġ* Ġas Ġenabled Ġby Ġreactor - extra 's Ġ[ Repeat ] Ġbuilder . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtimes Ġthe Ġmaximum Ġnumber Ġof Ġretry Ġattempts Ċ Ġ* Ġ@ param Ġfirst Ġthe Ġinitial Ġdelay Ġin Ġretry ing Ċ Ġ* Ġ@ param Ġmax Ġthe Ġoptional Ġupper Ġlimit Ġthe Ġdelay Ġcan Ġreach Ġafter Ġsubsequent Ġback offs Ċ Ġ* Ġ@ param Ġdo On Repeat Ġoptional Ġ[ Consumer ]- like Ġlambda Ġthat Ġwill Ġreceive Ġa Ġ[ Repeat Context ] Ċ Ġ* ĠĠ Ġeach Ġtime Ġan Ġattempt Ġis Ġmade . Ċ Ġ* Ċ Ġ* Ġ@ author ĠSimon ĠBas lÃ© Ċ Ġ* Ġ@ since Ġ 3 . 1 . 1 Ċ Ġ*/ Ċ fun Ġ< T > ĠFlux < T >. repeat Random Backoff ( times : ĠLong , Ġfirst : ĠDuration , Ġmax : ĠDuration ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Repeat : Ġ(( Repeat Context < T >) Ġ-> ĠUnit )? Ġ= Ġnull ): ĠFlux < T > Ġ{ ĊĠĠĠ Ġval Ġrepeat Ġ= ĠRepeat . times < T >( times ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. random Backoff ( first , Ġmax ) ĊĊĠĠĠ Ġreturn Ġif Ġ( do On Repeat Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġrepeat . apply ( this ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġrepeat . do On Repeat ( do On Repeat ). apply ( this ) Ċ } ĊĊ Ċ /** Ċ Ġ* ĠExtension Ġto Ġadd Ġa Ġ[ Mono . repeat ] Ġvariant Ġto Ġ[ Mono ] Ġthat Ġuses Ġan Ġexponential Ġbackoff , Ċ Ġ* Ġas Ġenabled Ġby Ġreactor - extra 's Ġ[ Repeat ] Ġbuilder . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtimes Ġthe Ġmaximum Ġnumber Ġof Ġretry Ġattempts Ċ Ġ* Ġ@ param Ġfirst Ġthe Ġinitial Ġdelay Ġin Ġretry ing Ċ Ġ* Ġ@ param Ġmax Ġthe Ġoptional Ġupper Ġlimit Ġthe Ġdelay Ġcan Ġreach Ġafter Ġsubsequent Ġback offs Ċ Ġ* Ġ@ param Ġj itter Ġoptional Ġflag Ġto Ġactivate Ġrandom Ġj itter Ġin Ġthe Ġback offs Ċ Ġ* Ġ@ param Ġdo On Repeat Ġoptional Ġ[ Consumer ]- like Ġlambda Ġthat Ġwill Ġreceive Ġa Ġ[ Repeat Context ] Ċ Ġ* ĠĠ Ġeach Ġtime Ġan Ġattempt Ġis Ġmade . Ċ Ġ* Ċ Ġ* Ġ@ author ĠSimon ĠBas lÃ© Ċ Ġ* Ġ@ since Ġ 3 . 1 . 1 Ċ Ġ*/ Ċ fun Ġ< T > ĠMono < T >. repeat Exponent ial Backoff ( times : ĠLong , Ġfirst : ĠDuration , Ġmax : ĠDuration ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġj itter : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Repeat : Ġ(( Repeat Context < T >) Ġ-> ĠUnit )? Ġ= Ġnull ): ĠFlux < T > Ġ{ ĊĠĠĠ Ġval Ġrepeat Ġ= ĠRepeat . times < T >( times ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. exponent ial Backoff ( first , Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. j itter ( if Ġ( j itter ) ĠJ itter . random () Ġelse ĠJ itter . no J itter ()) ĊĊĠĠĠ Ġreturn Ġif Ġ( do On Repeat Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġrepeat . apply ( this ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġrepeat . do On Repeat ( do On Repeat ). apply ( this ) Ċ } Ċ Ċ /** Ċ Ġ* ĠExtension Ġto Ġadd Ġa Ġ[ Mono . repeat ] Ġvariant Ġto Ġ[ Mono ] Ġthat Ġuses Ġa Ġrandom ized Ġbackoff , Ċ Ġ* Ġas Ġenabled Ġby Ġreactor - extra 's Ġ[ Repeat ] Ġbuilder . Ċ Ġ* Ċ Ġ* Ġ@ param Ġtimes Ġthe Ġmaximum Ġnumber Ġof Ġretry Ġattempts Ċ Ġ* Ġ@ param Ġfirst Ġthe Ġinitial Ġdelay Ġin Ġretry ing Ċ Ġ* Ġ@ param Ġmax Ġthe Ġoptional Ġupper Ġlimit Ġthe Ġdelay Ġcan Ġreach Ġafter Ġsubsequent Ġback offs Ċ Ġ* Ġ@ param Ġdo On Repeat Ġoptional Ġ[ Consumer ]- like Ġlambda Ġthat Ġwill Ġreceive Ġa Ġ[ Repeat Context ] Ċ Ġ* ĠĠ Ġeach Ġtime Ġan Ġattempt Ġis Ġmade . Ċ Ġ* Ċ Ġ* Ġ@ author ĠSimon ĠBas lÃ© Ċ Ġ* Ġ@ since Ġ 3 . 1 . 1 Ċ Ġ*/ Ċ fun Ġ< T > ĠMono < T >. repeat Random Backoff ( times : ĠLong , Ġfirst : ĠDuration , Ġmax : ĠDuration ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Repeat : Ġ(( Repeat Context < T >) Ġ-> ĠUnit )? Ġ= Ġnull ): ĠFlux < T > Ġ{ ĊĠĠĠ Ġval Ġrepeat Ġ= ĠRepeat . times < T >( times ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. random Backoff ( first , Ġmax ) ĊĊĠĠĠ Ġreturn Ġif Ġ( do On Repeat Ġ== Ġnull ) ĊĠĠĠĠĠĠĠ Ġrepeat . apply ( this ) ĊĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġrepeat . do On Repeat ( do On Repeat ). apply ( this ) Ċ }