我们正在使用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的软件负载平衡。
答案 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