当我们在进行服务间调用的时候,如果服务没有调用成功报错了,这时我们想通过自己的方式来处理这个报错,那么我们可以使用熔断的功能.
首先我们在pom中添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
然后我们就可以使用熔断功能了.
使用方法如下.在我们使用的feign的接口类的@FeignClient注解中添加内容 fallback或者fallbackFactory两者的不通在下面用例子介绍
- 首先我们使用fallback
@FeignClient(name = "cysoft-upload", url = WebsiteConstants.GATEWAY_URL+"/cysoft-upload" ,fallback = TestFallBack.class)
public interface TestServiceFeign {
@PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
JSONObject test(@RequestPart("file") MultipartFile file);
}
然后我们创建TestFallBack这个类,类中实现TestServiceFeign,这样会让我们覆盖test方法,才这个方法中我们就可以定义自己想要在调用接口报错的时候返回的内容了.就像下面代码中,定义了返回的json内容.
@Component
public class TestFallBack implements TestServiceFeign{
@Override
public JSONObject test(MultipartFile file) {
JSONObject jsonObject=new JSONObject();
jsonObject.put("message","报错了");
return jsonObject;
}
}
- 现在看使用fallbackFactory方式来实现熔断,将刚刚的fallback删除使用fallbackFactory参数,
@FeignClient(name = "cysoft-upload", url = WebsiteConstants.GATEWAY_URL+"/cysoft-upload",configuration = FeignConfiguration.class , fallbackFactory = TestFallBack.class)
public interface TestServiceFeign {
//使用SpringQueryMap注解才能接收到 实体或map容器的参数
@PostMapping(value = "/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
JSONObject test(@RequestPart("file") MultipartFile file);
}
创建TestFallBackFactory,由下面代码可以看出,通过factory我们能够抓取到报错的信息,然后进一步进行编写返回的信息.
@Component
public class TestFallBackFactory implements FallbackFactory<TestServiceFeign> {
@Override
public TestServiceFeign create(Throwable throwable) {
return new TestServiceFeign() {
@Override
public JSONObject test(MultipartFile file) {
JSONObject jsonObject =new JSONObject();
jsonObject.put("msg","出错了:"+throwable.getMessage());
return jsonObject;
}
};
}
}

1074

被折叠的 条评论
为什么被折叠?



