Я пытаюсь создать клиент 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, срабатывает откат.Но мне нужно создать свой собственный симулированный экземпляр клиента, чтобы я мог динамически устанавливать 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 Я установил feign.hystrix.enabled=true
в файле .yml и @EnableCircuitBreaker на уровне приложения.