概述
網絡請求時,可能會出現以下異常請求,如果想在發生異常的情況下使系統可用,就要進行容錯處理。發生異常的情況可能有網絡請求超時、url參數錯誤等等。
Spring Cloud Feign就是通過Fallback實現的,有以下兩種方式:
1、@FeignClient.fallback = UserFeignFallback.class 指定一個實現Feign接口的類,當出現異常時調用該類中相應的方法
2、@FeignClient.fallbackFactory = UserFeignFactory.class 指定一個實現FallbackFactory<T>工廠接口的類
@FeignClient注解參數
name:指定FeignClient的名稱
url:一般用於調試,可以手動指定@FeignClient的調用地址
configuration:Feign配置,可以實現自定義屬性
fallback:自定義容錯處理類,當調用遠程接口失敗或者超時時,會調用對應接口的容錯邏輯,fallback指定的類必須實現@FeignClient標記的接口
path:定義當前FeignClient的統一前綴
實例
@FeignClient(name = "bos3dengine", path = "/api", fallback = FileRestServiceFallback.class,configuration = FeignMultipartSupportConfig.class) public interface IFileRestService { /** * 上傳模型文件 * * @param databaseKey * 數據庫key * @param file * 文件對象 * @param url * 文件下載地址 * @param name * 模型名稱 * @param type * 模型類型 * @return */ @RequestMapping(method = RequestMethod.POST, value="/{databaseKey}/files",consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public BosCommonResponse uploadFile(@PathVariable(value = "databaseKey") String databaseKey, @RequestPart(value = "file", required = false) MultipartFile file, @RequestParam(value = "url", required = false) String url, @RequestParam(value = "name", required = false) String name, @RequestParam(value = "type", required = false) String type);
}
@Component public class FileRestServiceFallback implements IFileRestService { @Override public BosCommonResponse uploadFile(String databaseKey,MultipartFile file, String url, String name,String type){ return BosCommonResponse.failure(); } }
當在實現了IFileRestService接口的Controller類中發生熔斷,會調用fallback指向的類的具體方法。