之前写了Sentinel限流的简单实用 https://blog.csdn.net/qq_29569183/article/details/108438171
除此之外Sentinel还可以整合Feign进行熔断处理。特别是Hystrix宣布不再维护后,可以轻松的切换成这种方案。整合过程与Hystrix类似
加入alibaba-Sentinel依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
yml文件配置启用 Feign 整合 Sentinel 的自动配置
# 开启feign对sentinel的支持
feign:
sentinel:
enabled: true
Feign接口
@FeignClient(value="user0001",configuration = FeignExceptionConfig.class ,fallbackFactory = UserFeignClientFallbackFactory.class, decode404 = true)
public interface UserFeignClient {
/**
* feign rpc访问远程/users-anon/login接口
* @param username
* @return
*/
@GetMapping(value = "/users-anon/login", params = "username")
LoginAppUser findByUsername(@RequestParam("username") String username);
@GetMapping(value = "/users-anon/mobile", params = "mobile")
LoginAppUser findByMobile(@RequestParam("mobile") String mobile);
@GetMapping(value = "/users", params = "params")
PageResult<SysUser> findUsers(@RequestParam Map<String, Object> params);
}
降级处理类
使用FallbackFactory的方式
import feign.hystrix.FallbackFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class UserFeignClientFallbackFactory implements FallbackFactory<UserFeignClient> {
private static final Logger log = LoggerFactory.getLogger(UserFeignClientFallbackFactory.class);
@Override
public UserFeignClient create(Throwable throwable) {
return new UserFeignClient() {
@Override
public LoginAppUser findByUsername(String username) {
log.error("通过用户名查询用户异常:{}", username, throwable);
return new LoginAppUser() ;
}
@Override
public LoginAppUser findByMobile(String mobile) {
log.error("通过手机号查询用户异常:{}", mobile, throwable);
return new LoginAppUser();
}
@Override
public PageResult<SysUser> findUsers(Map<String, Object> params) {
log.error("查询用户列表异常:{}");
return null;
}
};
}
}