繁体   English   中英

如何使用jhipster-registry动态地将请求流量从旧服务器实例切换到新服务器实例?

[英]How to switch request traffic from old server instance to a new one dynamically with jhipster-registry?

我使用jhipster-registry进行注册并管理微服务。它基于Spring Cloud Netflix Eureka和Spring Cloud Config。

当我添加新的api并发布微服务的下一个版本时,我需要

  1. 启动一个新的服务实例
  2. 将请求流量从旧实例切换到新实例
  3. 删除/关闭旧的

我不想在这些步骤中重启我的网关。 实际上,我看起来是一个运行时动态路由方法。

尤里卡

不幸的是,这并不容易,因为Eureka倾向于提供可用性而不是一致性,所以碰巧,您的服务发现包含已经死亡的服务。 我更喜欢与eurka​​一起使用的解决方法是为所有应用程序设置更高的MaxAutoRetries属性(这很简单,因为JHipster Registry是一个配置服务器,所以我为所有人分享这个),就像

ribbon:
  ConnectTimeout: 3000
  ReadTimeout: 60000
  MaxAutoRetries: 10

所以这至少会使您的请求在部署期间成功。 您将遇到一些延迟,因为第一次尝试将继续到旧服务,这是超时...但不需要重新启动,您的新服务大约在线。 部署后3 - 5分钟(这是我的经验......可能因情况而异)

领事

作为替代方案,您可以考虑切换到Hashicorps consul而不是eureka,这有利于一致性,因此您可以在部署后立即管理和同步服务发现。

目前JHipster并只提供测试版支持领事,becaue它不是可以运行一个完全安全的安装,因为这个错误在那里我在等待审查修复

它实际上很容易实现你想要的:

  • 使用不同的instanceIds部署两个版本的服务,例如service-v1service-v2 设置eureka.instance.instanceId很容易实现。

  • 最初,您的Zuul Gateway正在代理对service-v1的请求,并且配置服务器的gateway.yml中存在以下属性:

 zuul: routes: service: path: /service/** serviceId: service-v1 
  • 将配置服务器zuul配置更改为:
 zuul: routes: service: path: /service/** serviceId: service-v2 
  • 然后触发刷新网关的配置:
 curl -X POST http://localhost:8080/management/refresh 

(请注意,此端点是安全的,因此您需要传递一个令牌才能通过)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM