1. 程式人生 > >使用easy-retry輕鬆進行任務重試

使用easy-retry輕鬆進行任務重試

Easy-retry是一個Java任務重試框架。

主要特點

  • 靈活,可以設定不同的重試策略,比如
    • 發生異常時重試,你可以設定哪些異常被重試、哪些異常被忽略。
    • 返回值不符合預期時重置。

         也可以設定中斷重試的策略,比如達到最大重試次數、達到最多等待時間等。

  • 易用
    • 短短几行程式碼就可以重試你的任務。
  • 輕量級
    • 除了slf4j、logback日誌框架外,沒有引入任何第三方Jar包。

如何使用

引入依賴

<dependency>
        <groupId>com.github.bournecui</groupId>
        <artifactId>easy-retry</artifactId>
        <version>0.0.1</version>
</dependency>

使用EasyRetryBuilder構建EasyRetry例項,它是執行緒安全的,所以在你的程式裡構建一個就可以了。

EasyRetry easyRetry = EasyRetryBuilder.newBuilder()
                 .maxAttempts(10)
                 .includeExceptions(IllegalStateException.class)
                 .build();

使用EasyCallable(有返回值)或者EasyRunnable(沒有返回值)封裝你的任務並用easyRetry執行它。

Integer res1 = easyRetry.call(new EasyCallable<Integer>() {
            @Override
            public Integer call() {
                int aInt = (int) (Math.random() * 10);
                if (aInt % 3 != 0) {
                    throw new IllegalStateException(aInt + " is not expected!");
                }
                return aInt;
            }
        });

對於有返回值的任務,你可以使用ResultPredicate判斷返回值是不是你想要的,如果不是你想要的,它會進行重試。

Integer res2 = easyRetry.call(new EasyCallable<Integer>() {
            @Override
            public Integer call() {
                return (int) (Math.random() * 10);
            }
        }, new ResultPredicate<Integer>() {
            @Override
            public boolean test(Integer result) {
                return result % 3 != 0;
            }
        });

如果你使用蘭姆達表示式並static import來匯入com.github.bournecui.easyretry.EasyRetryBuilder.newBuilder,你的程式碼看起來會更簡潔。

newBuilder()
          .maxAttempts(10)
          .includeExceptions(IllegalStateException.class)
          .build()
          .call(() -> (int) (Math.random() * 10), result -> result % 3 != 0);

相關推薦

使用easy-retry輕鬆進行任務

Easy-retry是一個Java任務重試框架。 主要特點 靈活,可以設定不同的重試策略,比如 發生異常時重試,你可以設定哪些異常被重試、哪些異常被忽略。 返回值不符合預期時重置。          也可以設定中斷重試的策略,比如達到最大重試次數、達到最多等

Spring異常框架Spring Retry

value img bind 框架 項目 slf4 cti 延遲 oot Spring Retry支持集成到Spring或者Spring Boot項目中,而它支持AOP的切面註入寫法,所以在引入時必須引入aspectjweaver.jar包。 快速集成的代碼樣例:

自己動手實踐 spring retry 框架

null for llb ati dba 行為 turn .com min 前序 馬上過年了,預祝大家,新年快樂,少寫bug 什麽是spring retry? spring retry是從spring batch獨立出來的一個能功能,主要實現了重試和熔斷。 什麽時候用? 遠

Polly公共處理 -Retry

summary ilog .exe try HR 結果 domain png exceptio 封裝處理下Polly重試 private ILogger<PollyHelper> _logger; /// <summary>

java retry() spring retry, guava retrying 詳解

warn llb 序號 @service call 模板 out ble 結束 系列說明 java retry 的一步步實現機制。 java-retry 源碼地址 情景導入 簡單的需求 產品經理:實現一個按條件,查詢用戶信息的服務。 小明:好的。沒問題。 代碼 Use

retry常見場景及實現

  當我們的程式碼是有訪問網路相關的操作時,比如http請求或者訪問遠端資料庫,經常可能會發生一些錯誤,有些錯誤可能重新去傳送請求就會成功,本文分析常見可能需要重試的場景,並最後給出python程式碼實現。   常見異常分成兩種,一種是請求傳輸過程出錯,另一種是服務端負載過高導致錯誤。&

spring-retry與熔斷詳解— 億級流量 內容補充

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

優雅地處理載入中(loading),(retry)和無資料(empty)等

LoadSir是一個高效易用,低碳環保,擴充套件性良好的載入反饋頁管理框架,在載入網路或其他資料時候,根據需求切換狀態頁面,可新增自定義狀態頁面,如載入中,載入失敗,無資料,網路超時,佔位圖,登入失效等常用頁面。可配合網路載入框架,結合返回狀態碼,錯誤碼,資料進行狀態頁自動切

Python學習之------retry(異常

在做資料抓取的時候,經常遇到由於網路問題導致的程式儲存,先前只是記錄了錯誤內容,並對錯誤內容進行後期處理。 原先的流程: def crawl_page(url): pass def log_error(url): pass url = "" try: cra

Spring的異常框架Spring Retry簡單配置講解

/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may no

登入伺服器windows2008出現:遠端桌面服務當前正忙,因此無法完成您嘗試執行的任務。請在幾分鐘後。其他使用者應該仍然能夠登入...

登入伺服器windows2008出現:遠端桌面服務當前正忙,因此無法完成您嘗試執行的任務。請在幾分鐘後重試。其他使用者應該仍然能夠登入 問題:有段時間登入伺服器總是提示:遠端桌面服務當前正忙,因此無法完成您嘗試執行的任務。請在幾分鐘後重試。其他使用者應該仍然能夠等你來(或者登入出現黑屏介面) 在微軟找到的

使用guava-retry優雅的實現介面

介紹 API 介面呼叫異常, 網路異常在我們日常開發中經常會遇到,這種情況下我們需要先重試幾次呼叫才能將其標識為錯誤並在確認錯誤之後傳送異常提醒。guava-retry可以靈活優雅的實現這一功能。

使用Spring-retry 1.1.4完成功能

前言 在實際專案中,經常需要在某種情況下對呼叫的方法進行重試,例如超時重試。通過Spring-retry能簡化重試功能的實現,並實現更多樣的重試操作。 Spring-retry結構 Spring-retry提供的RetryOperations介面,該介

Spring Retry機制

在呼叫第三方介面或者使用mq時,會出現網路抖動,連線超時等網路異常,所以需要重試。為了使處理更加健壯並且不太容易出現故障,後續的嘗試操作,有時候會幫助失敗的操作最後執行成功。例如,由於網路故障或資料庫更新中的DeadLockLoserException導致Web

java 失敗 ribbon spring-retry

java 失敗重試 ribbon springretry ribbon 提供了Springcloud下負載均衡和失敗重試測試,ribbon 預設提供了httpclient 發起http請求,使用rxjava的retry機制進行失敗重試,使用了ribbon

spring-retry支援

什麼時候需要重處理? 在實際工作中,重處理是一個非常常見的場景,比如:傳送訊息失敗,呼叫遠端服務失敗,爭搶鎖失敗,等等,這些錯誤可能是因為網路波動造成的,等待過後重處理就能成功.通常來說,會用try/catch,while迴圈之類的語法來進行重處理,但是這樣的

spring-retry與熔斷詳解

轉至:http://www.broadview.com.cn/article/233 本文是《億級流量》第6章 超時與重試機制補充內容。 spring-retry專案實現了重試和熔斷功能,目前已用於SpringBatch、Spring Integrat

springboot 整合retry機制)

word 觸發 start 結束 image func ams .get delay 當我們調用一個接口可能由於網絡等原因造成第一次失敗,再去嘗試就成功了,這就是重試機制,spring支持重試機制,並且在Spring Cloud中可以與Hystaix結合使用,可

【最佳實踐】如何優雅的進行

本文口味:冰鎮楊梅 預計閱讀:20分鐘 說明 最近公司在搞活動,需要依賴一個第三方介面,測試階段並沒有什麼異常狀況,但上線後發現依賴的介面有時候會因為內部錯誤而返回系統異常,雖然概率不大,但總因為這個而報警總是不好的,何況死信佇列的訊息還需要麻煩運維進行重新投遞,所以加上重試機制勢在必行。 重試機制可以保護系

Ribbon進行服務呼叫/負載均衡以及請求配置

Ribbon負載均衡 經過對Eureka的認識,及Eureka叢集的搭建,已經基本可以入門Eureka的使用。之前對於服務呼叫者我們是直接獲取註冊列表後通過 get(0) 的方式來獲取第一個註冊資訊。而當我們服務提供者也搭建了叢集之後。這種方式是不可取的。那麼如何選擇一個合適的提供者來提供服務呢? 首先排除我