2016-04-28 3 views
0

Я создаю учебное приложение с API-интерфейсами Netflix для микросервисов.Тайм-аут Исключение в краю с помощью Feign и Hystrix

Это мой край, начиная с локального хоста: 9999:

@EnableHystrix 
@EnableZuulProxy 
@EnableEurekaClient 
@SpringBootApplication 
public class EdgeApplication { 
    public static void main(String[] args) { 
     SpringApplication.run(EdgeApplication.class, args); 
    } 
} 

Я определил 2 следующие приложения:

app-a выставляет простой веб-сервис service-a и начинает на локальной: 8081 app-b выставляет веб-сервис service-b, который вызывает service-a, и начинается на локальном телефоне: 8082

service-b звонки service-a с помощью Netflix симулировать:

@FeignClient(value = "app-a", fallback = AppAFallback.class) 
public interface AppAClient { 
    @RequestMapping(value = "service-a", method = RequestMethod.GET) 
    List<Entity> serviceA(); 
} 
@Component 
public class AppAFallback implements AppAClient { 
    private static final Entity DEFAULT_ENTITY = new Entity(); 

    @Override 
    public List<Entity> serviceA() { 
     return Collections.singletonList(DEFAULT_ENTITY); 
    } 
} 

Хотя app-a и app-b работают, каждый сервис отвечает, как и ожидалось:

Резервный AppAFallback должен быть вызван, если app-b вниз. Однако я должен ждать примерно за 1 минуту до того, как это произойдет.

Только после того, как app-b вниз:

и 1 минуту после app-b вниз:

И это результат, которого я ожидал. Любая идея о том, почему звонки на app-a/service-a сразу после app-b не дают мне ВРЕМЯ?

Заранее за вашу помощь.

ответ

0

У меня такая же проблема, и я думаю (не проверен), это частота обновления Eureka вызывает проблему. Сразу после того, как приложение-b не работает, Эврика все еще думает, что приложение-б (еще не проверено сердцебиение). И после того, как приложение-b отключилось на 1 минуту, Eureka известное приложение-b не работает, просто сообщает вашему приложению, что нет приложения-b, поэтому резервное копирование сразу же запускается.

Смежные вопросы