В моем весеннем загрузочном приложении я использую несколько фиктивных клиентов (@FeignClient("hello-service")). В случае многих из них мне нужен механизм автоматического выключателя, поэтому у меня есть следующая строка в конфигурации.
feign.hystrix.enabled=true
Однако я не знаю, как настроить конкретный фиктивный клиент, чтобы он не использовал Hystrix. Является ли это возможным? Кому-нибудь удалось настроить весенние приложения таким образом?
Вы можете создать собственную конфигурацию с отключенным функционалом hystrix и использовать ее для необходимых клиентов.
public class FeignClientConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}
См. подробности в пункт 7.4
Я хотел бы расширить ответ Романа, так как я не понял, как его использовать в начале.
Как он упомянул, вам нужно иметь такой класс конфигурации
public class MyFeignConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}
И вам нужно включить этот класс конфигурации в свой @FeignClient, вот так
@FeignClient(name = "name", url = "http://example.com", configuration = MyFeignConfiguration .class)
public interface MyApi {
//...
}
С этой конфигурацией этот клиент будет собран без обёртывания Hystrix.
Этот подход не работал для меня. Добавление нового @Bean отключает мое поведение Hystrix во всех клиентах Feign. Даже для тех, которые не используют новый класс конфигурации. Подробности здесь stackoverflow.com/questions/62669138/…
Это должно работать, если класс MyFeignConfiguration теперь имеет аннотацию @ Configuration. Из официальных документов Feign: FooConfiguration не нужно аннотировать с помощью @ Configuration. Однако, если это так, позаботьтесь о том, чтобы исключить его из любого @ ComponentScan, который в противном случае включал бы эту конфигурацию, поскольку он станет источником по умолчанию для feign.Decoder, feign.Encoder, feign.Contract и т. д., если указано. Этого можно избежать, поместив его в отдельный, неперекрывающийся пакет из любого @ComponentScan или @SpringBootApplication, либо его можно явно исключить в @ComponentScan.
Вам нужно будет следовать cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/single/… и создать bean-компонент
DefaultTargeter. Если вы еще не поняли это в ближайшее время, пингуйте меня, и я найду время, чтобы написать ответ.