Как отключить hystrix в одном из нескольких фиктивных клиентов

В моем весеннем загрузочном приложении я использую несколько фиктивных клиентов (@FeignClient("hello-service")). В случае многих из них мне нужен механизм автоматического выключателя, поэтому у меня есть следующая строка в конфигурации.

feign.hystrix.enabled=true

Однако я не знаю, как настроить конкретный фиктивный клиент, чтобы он не использовал Hystrix. Является ли это возможным? Кому-нибудь удалось настроить весенние приложения таким образом?

Вам нужно будет следовать cloud.spring.io/spring-cloud-static/Greenwich.RELEASE/single‌​/… и создать bean-компонент DefaultTargeter. Если вы еще не поняли это в ближайшее время, пингуйте меня, и я найду время, чтобы написать ответ.

spencergibb 19.03.2019 20:32
3
1
1 238
2

Ответы 2

Вы можете создать собственную конфигурацию с отключенным функционалом 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/…

Vinod Kumar Rai 07.07.2020 04:35

Это должно работать, если класс MyFeignConfiguration теперь имеет аннотацию @ Configuration. Из официальных документов Feign: FooConfiguration не нужно аннотировать с помощью @ Configuration. Однако, если это так, позаботьтесь о том, чтобы исключить его из любого @ ComponentScan, который в противном случае включал бы эту конфигурацию, поскольку он станет источником по умолчанию для feign.Decoder, feign.Encoder, feign.Contract и т. д., если указано. Этого можно избежать, поместив его в отдельный, неперекрывающийся пакет из любого @ComponentScan или @SpringBootApplication, либо его можно явно исключить в @ComponentScan.

tonyfarney 12.11.2021 20:39

Другие вопросы по теме