【发布时间】:2019-11-05 06:29:53
【问题描述】:
我正在尝试创建一个 Feign 客户端,该客户端在失败时具有回退方法。
通过以下示例,我创建了一个简单的 Feign 客户端:
@Component
@FeignClient(value = "authenticationClient", fallback = AuthenticationClientFallback.class)
public interface AuthenticationClient
{
@RequestMapping(method = RequestMethod.GET, value = "/auth/userinfo")
UserInfoResource getUserInfo(@RequestHeader("Authorization") String token);
@RequestMapping(method = RequestMethod.GET, value = "/auth/token")
TokenResource getToken(@RequestHeader("Authorization") String basicAuth);
}
AuthenticaionClientFallback 类如下:
@Component
public class AuthenticationClientFallback implements AuthenticationClient
{
public static final String NO_TOKEN = "No Token";
@Override
public UserInfoResource getUserInfo(String token)
{
return null;
}
@Override
public TokenResource getToken(String basicAuth)
{
return new TokenResource(NO_TOKEN);
}
}
当我使用带有@Autowire 注释的客户端时,会触发回退。但我需要创建自己的 feign 客户端实例,以便动态设置 URL。
AuthenticationClient的初始化:
public AuthenticationClient getAuthenticationClient()
{
return HystrixFeign.builder().contract(new SpringMvcContract())
.encoder(new JacksonEncoder())
.decoder(new JacksonDecoder())
.client(new OkHttpClient())
.logger(new Slf4jLogger(AuthenticationClient.class))
.logLevel(Logger.Level.FULL).target(AuthenticationClient.class, getTargetURL());
}
现在我的后备方法永远不会被调用,只是抛出一个 FeignException 并返回一个 401 状态代码的消息。
PS 我在 .yml 文件中设置了feign.hystrix.enabled=true,并在应用程序级别设置了@EnableCircuitBreaker。
【问题讨论】:
-
如果您使用构建器构建它,则不需要@FeignClient
-
回退时也没有@Component
标签: spring spring-cloud hystrix spring-cloud-feign feign