SpringCloud Gateway使用consul作为注册中心,consul在云服务器上,大家都在本地开发,于是我把consul的ribbon enabled: false
cloud:
consul:
ribbon:
enabled: false
gateway:
routes:
- id: db-management
uri: lb://db-management
predicates:
- Path=/management/**
db-management:
ribbon:
listOfServers: 192.168.0.107:8019
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule
现在使用网管转发,提示没有在线的服务:
No up servers available from load balancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=db-management,current list of Servers=[192.168.0.107:8019],Load balancer stats=Zone stats: {unknown=[Zone:unknown; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;]
},Server stats: [[Server:192.168.0.107:8019; Zone:UNKNOWN; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 GMT+08:00 1970; First connection made: Thu Jan 01 08:00:00 GMT+08:00 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0]
]}ServerList:com.netflix.loadbalancer.ConfigurationBasedServerList@40c4e7b8
您的问题似乎是由于Spring Cloud Gateway无法找到可用的服务实例而导致的。虽然您在配置中禁用了Ribbon负载均衡(通过将ribbon.enabled
设置为false
),但是Gateway仍然会尝试通过Ribbon来查找可用的服务实例。
您在配置中指定了一个名为db-management
的服务,但是在您提供的配置中,并没有发现将db-management
注册到Consul或其他服务注册中心。因此,Gateway在查找db-management
服务实例时会发现没有在线的服务,导致无法完成路由。
以下是您可以尝试的几个步骤:
确保服务已注册: 在您的Spring Boot应用程序中,确保将db-management
服务注册到Consul或其他您选择的服务注册中心。
修改路由配置: 在Gateway的路由配置中,您可以将uri
的值更改为实际的服务ID,而不是lb://db-management
。例如,如果您的服务ID是db-management
,则可以将配置修改为:
gateway:
routes:
- id: db-management
uri: lb://db-management
predicates:
- Path=/management/**
这将使用服务ID进行路由,并使用注册中心中可用的实例来转发流量。
验证服务注册状态: 您可以通过Consul的管理界面或API来验证服务是否已正确注册。确保服务在Consul中以正确的名称注册,并且实例的状态为“通过健康检查”。
重启Gateway: 如果您修改了配置,请尝试重启Gateway应用程序以使更改生效。
总之,确认您的服务已正确注册到Consul中,确保Gateway的路由配置使用了正确的服务ID,并确保所有的应用程序和服务实例都正常运行和可用。如果问题仍然存在,您可能需要进一步检查服务注册、命名、配置和健康状态等方面的问题。