我正在一个微服务架构中工作,其工作方式如下
我有两个服务 Web 应用程序(REST 服务)在 eureka 服务器中正确注册自己,然后我有一个客户端应用程序获取 eureka 注册表并使用功能区作为客户端负载均衡器,确定哪个服务应用程序去(目前,正在使用一个简单的循环)。
我的问题是,当我停止其中一个服务应用程序(它们当前在 docker 容器中运行)时,eureka 不会将它们从注册表中删除(似乎需要几分钟),所以功能区仍然认为有 2 个可用服务,使得大约 50% 的呼叫失败。
不幸的是,我没有使用 Spring Cloud(我无法控制的原因)。所以我对尤里卡的配置如下。
对于服务应用程序:
eureka.registration.enabled=true
eureka.name=skeleton-service
eureka.vipAddress=skeleton-service
eureka.statusPageUrlPath=/health/ping
eureka.healthCheckUrlPath=/health/check
eureka.port.enabled=8042
eureka.port=8042
eureka.appinfo.replicate.interval=5
## configuration related to reaching the eureka servers
eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://eureka-container:8080/eureka/v2/
eureka.decoderName=JacksonJson
对于客户端应用程序(eureka + 功能区)
###Eureka Client configuration for Sample Eureka Client
eureka.registration.enabled=false
eureka.name=skeleton-web
eureka.vipAddress=skeleton-web
eureka.statusPageUrlPath=/health/ping
eureka.healthCheckUrlPath=/health/check
eureka.port.enabled=8043
eureka.port=8043
## configuration related to reaching the eureka servers
eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.serviceUrl.default=http://eureka-container:8080/eureka/v2/
eureka.decoderName=JacksonJson
eureka.renewalThresholdUpdateIntervalMs=3000
#####################
# RIBBON STUFF HERE #
#####################
sample-client.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList
# expressed in milliseconds
sample-client.ribbon.ServerListRefreshInterval=3000
# movieservice is the virtual address that the target server(s) uses to register with Eureka server
sample-client.ribbon.DeploymentContextBasedVipAddresses=skeleton-service