Spring 云网关阻止路由发现请求

Spring Cloud Gateway blocking requests for route descovery

我正在使用 spring-cloud-starter-gateway 版本 2.1.0.RELEASE 的 Spring Cloud Gateway,我需要了解为什么 Gateway 会阻止执行 DiscoveryClientRouteDefinitionLocator 进程的请求。

Spring云版本:Greenwich.RELEASE.

我有两个环境:暂存和生产。

在生产中,我们有一个工作网关,/actuator/health 调用具有以下延迟:

我正在调查为什么这些峰值发生在一个简单的健康调用上,我发现网关有时会阻止任何请求(甚至是健康或真正的微服务调用)来执行我所有微服务的发现路由。

我们使用 Consul 作为发现服务器,我试图在我的暂存环境中测试这种延迟(Consul 上的硬件资源更少)。这个块的影响很明显:

改进 Consul 硬件资源后,我们不再有尖峰,但运行状况调用的延迟仍然不完美(发现所有路由时有小的尖峰):

我要问:为什么Spring Cloud Gateway 即使有缓存功能也会阻塞请求?这个进程运行不应该在后台吗?我做错了什么? Spring Cloud Gateway 真的有问题吗?

谢谢。

正如所讨论的 here 之前版本的 Spring Cloud Gateway 使用的是阻塞发现客户端。

使用比 2.1.5.RELEASE 更新的版本将导致网关更加异步,不会执行很多阻塞请求。