使用Feign和Hystrix在边缘的TimeoutException

时间:2016-04-28 16:04:17

标签: spring netflix netflix-eureka netflix-zuul netflix-feign

我正在使用Netflix微服务API构建培训应用程序。

这是我的优势,从localhost:9999:

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

我定义了以下2个应用:

app-a公开了一个简单的Web服务service-a,并从localhost:8081开始 app-b公开了一个名为service-b的网络服务service-a,并在localhost:8082上启动

service-b使用Netflix Feign调用service-a

@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-aapp-b正在运行时,每个服务都会按预期回答:

如果AppAFallback关闭,则应调用后备app-b。但是我必须在它发生之前等待大约1分钟。

app-b关闭之后:

app-b关闭后1分钟:

这是我预期的结果。关于为什么在app-a/service-a之后拨打app-b的请求失败的任何想法都给了我TIMEOUT?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我认为(未经测试),这是Eureka的更新频率导致的问题。在app-b关闭之后,Eureka仍然认为app-b已启动(尚未检查心跳)。在app-b关闭1分钟后,Eureka知道app-b已经关闭,只是告诉你的应用程序 - 没有app-b,因此立即启动后备。