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

如何使用jhipster注册表将请求流量从旧服务器实例动态切换到新服务器实例?,jhipster,microservices,netflix-eureka,Jhipster,Microservices,Netflix Eureka,我使用jhipster注册表进行注册和管理微服务,它基于SpringCloudNetflix Eureka和SpringCloud配置 当我添加新的api并发布下一版本的微服务时,我需要 启动一个新的服务实例 将请求流量从旧实例切换到新实例 移除/关闭旧的 在这些步骤中,我不想重新启动网关。实际上,我正在寻找一种运行时动态路由方法。eureka 不幸的是,这并不是那么容易,因为Eureka更喜欢可用性而不是一致性,所以您的服务发现由服务组成,而这些服务是死的。我更喜欢使用eurka的一个解决方法

我使用jhipster注册表进行注册和管理微服务,它基于SpringCloudNetflix Eureka和SpringCloud配置

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

  • 启动一个新的服务实例
  • 将请求流量从旧实例切换到新实例
  • 移除/关闭旧的
  • 在这些步骤中,我不想重新启动网关。实际上,我正在寻找一种运行时动态路由方法。

    eureka 不幸的是,这并不是那么容易,因为Eureka更喜欢可用性而不是一致性,所以您的服务发现由服务组成,而这些服务是死的。我更喜欢使用eurka的一个解决方法是为所有应用程序设置更高的MaxAutoRetries属性(这很容易,因为JHipster注册表是一个配置服务器,所以我为所有应用程序共享这个属性),如

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

    领事

    作为替代方案,您可能会考虑切换到HasigRoPS领事而不是EUKKA,这有利于一致性,这样您就可以在部署时管理和同步您的服务发现。 目前JHipster只为Concur提供测试版支持,因为它不可能运行完全安全的安装,因为我正在等待对

    eureka的审查 不幸的是,这并不是那么容易,因为Eureka更喜欢可用性而不是一致性,所以您的服务发现由服务组成,而这些服务是死的。我更喜欢使用eurka的一个解决方法是为所有应用程序设置更高的MaxAutoRetries属性(这很容易,因为JHipster注册表是一个配置服务器,所以我为所有应用程序共享这个属性),如

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

    领事

    作为替代方案,您可能会考虑切换到HasigRoPS领事而不是EUKKA,这有利于一致性,这样您就可以在部署时管理和同步您的服务发现。


    目前JHipster只为Concur提供测试版支持,因为它不可能运行完全安全的安装,因为我正在等待对它的审查,实际上很容易实现您想要的:

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

    • 首先,Zuul网关正在代理对service-v1的请求,配置服务器的Gateway.yml中存在以下属性:

    • 将配置服务器zuul配置更改为:
    • 然后触发网关配置的刷新:

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

    实现您想要的目标实际上很容易:

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

    • 首先,Zuul网关正在代理对service-v1的请求,配置服务器的Gateway.yml中存在以下属性:

    • 将配置服务器zuul配置更改为:
    • 然后触发网关配置的刷新:

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

    如果在develop env中使用此方法,某些延迟将被抑制,您是否在dev env中将enable self-preservation设置为false?如果在develop env中使用此方法,某些延迟将被抑制,在dev env中是否将启用自我保护设置为false?
    ribbon:
      ConnectTimeout: 3000
      ReadTimeout: 60000
      MaxAutoRetries: 10
    
    zuul:
      routes:
        service:
          path: /service/**
          serviceId: service-v1
    
    zuul:
      routes:
        service:
          path: /service/**
          serviceId: service-v2
    
    curl -X POST http://localhost:8080/management/refresh