SpringCloud Feign通過FallbackFactory顯示異常信息
阿新 • • 發佈:2019-05-14
ring 捕獲 ESS post 接下來 我們 erb var 實現類
SpringCloud Feign可以進行服務消費,而且內置了Hystrix,能夠進行熔斷。
Feign可以通過fallback指定熔斷回調的類。代碼示例及講解可見:
https://www.cnblogs.com/expiator/p/10826852.html
但是,有時候我們還需要記錄異常信息,可以通過fallbackFactory實現。
服務提供者
示例如下:
@RestController public class UserController { @PostMapping("/user/name/{id}") public JSONObject getUserNameById(@PathVariable("id") Integer id ) throws Exception { System.out.println("==================================================================>getUserNameById(),id為:"+id); //直接拋異常,是為了方便測試服務熔斷和降級。 throw new Exception("getUserNameByIdException"); } @PostMapping("/user") public User getUserById(@RequestParam("id") Integer id ) throws Exception { System.out.println("==================================================================>getUserById(),id為:"+id); throw new Exception("getUserByIdException"); } }
服務消費者
FeignClient接口
首先是@FeignClient,屬性fallbackFactory指定實現類,如下:
/** * 使用fallbackFactory捕獲異常,並進行服務熔斷、服務降級。 */ @FeignClient(value = "eureka-client",fallbackFactory = UserFeignClientFallbackFactory.class) public interface UserFeignClient { @PostMapping(value = "/user/name/{id}") JSONObject getUserNameById(@PathVariable("id") Integer id); @PostMapping(value = "/user") User getUserById(@RequestParam("id") Integer id); }
FallbackFactory實現類
接下來是FallbackFactory的實現類,需要重寫create()方法,這個方法的參數為Throwable異常類,可以借此記錄異常信息。
create()返回進行服務熔斷/降級的Hystrix類。
@Component public class UserFeignClientFallbackFactory implements FallbackFactory<UserFeignClient> { @Override public UserFeignClient create(Throwable cause) { System.out.println("====================================》fallback reason was: " + cause.getMessage()); return new UserFeignClientHystrix(); //也可以不寫UserClientFallbackFactory類,直接用匿名對象寫成以下形式: // return new UserFeignClient(Integer id) { // @Override // public JSONObject getUserNameById() { // JSONObject resultJson = new JSONObject(); // resultJson.put("id", "-1" ); // resultJson.put("name", "null" ); // return resultJson; // } // }; } }
FeignClient實現類(也就是Hystrix類)
Hystrix類如下所示:
@Component
public class UserFeignClientHystrix implements UserFeignClient {
/**
* 服務熔斷
* @param id
* @return
*/
@Override
public JSONObject getUserNameById(Integer id) {
System.out.println("=======================>UserClientFallbackFactoryTest");
JSONObject resultJson = new JSONObject();
resultJson.put("errCode", "0404" );
String description="查詢id為"+id+"的用戶,服務異常,暫時熔斷";
resultJson.put("description", description );
return resultJson;
}
@Override
public User getUserById(Integer id) {
System.out.println("=======================>UserClientFallbackFactoryTest");
//直接返回id為-1的用戶
User user = new User();
user.setId(-1);
return user;
}
}
測試
啟動註冊中心,服務提供者,服務消費者。
訪問服務消費者的接口,能夠得到服務提供者拋出的異常信息。
如下所示:
SpringCloud Feign通過FallbackFactory顯示異常信息