前言
前面我们使用 @HystrixCommand
注解来做服务熔断降级。这种方式存在很大的弊端,代码冗余,并且是不管是否降级都事先开启了新线程,而使用fallback的方式则不调用feign方法前都是在之前的主线程中,只有超时了,才会开新线程来处理,这样性能上更好。
代码改造
Hystrix 使用类方式
//Hystrix 第二种方式,使用类方式
@RequestMapping("/getUserInfoByMemberHystrix2")
public BaseResponse getUserInfoByMemberHystrix2() {
System.out.println("getUserInfoByMemberHystrix-->线程池名称:" + Thread.currentThread().getName());
return memberServiceFeign.getUserInfo();
}
MemberServiceFallback
package com.baba.api.fallback;
import com.baba.api.entity.UserEntity;
import com.baba.api.feign.MemberServiceFeign;
import com.baba.wlb.base.BaseApiService;
import com.baba.wlb.base.BaseResponse;
import org.springframework.stereotype.Component;
/**
* @Author wulongbo
* @Date 2021/1/28 10:13
* @Version 1.0
*/@Component
public class MemberServiceFallback extends BaseApiService implements MemberServiceFeign {
@Override
public UserEntity getMember(String name) {
return null;
}
// 服务降级友好提示
@Override
public BaseResponse getUserInfo() {
return setResultError("以类的方式写服务降级,服务器繁忙,请稍后重试!");
}
}
MemberServiceFeign
@FeignClient(name = "app-member")
改为 @FeignClient(value = "app-member",fallback = MemberServiceFallback.class)
package com.baba.api.feign;
import com.baba.api.fallback.MemberServiceFallback;
import com.baba.api.service.IMemberService;
import org.springframework.cloud.openfeign.FeignClient;
/**
* @Author wulongbo
* @Date 2021/1/22 14:12
* @Version 1.0
*///@FeignClient(name = "app-member")
@FeignClient(value = "app-member",fallback = MemberServiceFallback.class)
public interface MemberServiceFeign extends IMemberService{
}
这样就实现了类的方式调用Fallback。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。