Spring Cloud Gateway负载平衡

时间:2019-11-28 11:45:03

标签: apache-camel spring-cloud-gateway

我们正在使用Spring Cloud Gateway [JavaDsl]作为我们的API网关。对于代理,我们有多个[在不同的ip:port上运行]微服务作为目标。想知道我们是否可以配置多个目标来使用Spring Cloud Gateway代理,类似于apache camel load balancer eip。

camel.apache.org/manual/latest/loadBalance-eip.html

我们正在寻找使用弹簧云网关[类似于netflix / apache-camel]而不是另一个专用LB的软件负载平衡。

2 个答案:

答案 0 :(得分:0)

能够使用spring-cloud-starter-netflix-ribbon使Spring Cloud Gateway负载均衡路由工作。但是,当其中一个服务器实例关闭时,负载平衡将失败。下面的代码段。

版本:

spring-cloud-gateway:2.1.1.BUILD-SNAPSHOT

  

网关路线

.route(
        r ->
            r.path("/res/security/")
            .filters( f -> f
                    .preserveHostHeader()
                    .rewritePath("/res/security/", "/targetContext/security/")
                    .filter(new LoggingFilter()) 
                    .uri("lb://target-service1-endpoints")
            )           
  

application.yml

ribbon:
  eureka:
   enabled: false


target-service1-endpoints:
  ribbon:
    listOfServers: 172.xx.xx.s1:80, 172.xx.xx.s2:80
    ServerListRefreshInterval: 1000 
    retryableStatusCodes: 404, 500 
    MaxAutoRetriesNextServer: 1

management:
  endpoint:
    health:
      enabled: true

答案 1 :(得分:0)

这是Spring Cloud Team的回复。

您所描述的确实发生了。但是,它不是特定于网关的。如果您仅在带有listOfServers的Spring Cloud项目中使用Ribbon,则会发生相同的情况。这是因为与eureka不同,未检测到非发现服务IP(使用了DummyPing实例)。

您可以通过提供自己的IPing,IRule或ServerListFilter实现并覆盖我们以这种方式在自动配置中提供的设置来更改此行为。

https://github.com/spring-cloud/spring-cloud-gateway/issues/1482