SpringCloud自定义Ribbon配置无法找到服务

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服务实例时会发现没有在线的服务,导致无法完成路由。

以下是您可以尝试的几个步骤:

  1. 确保服务已注册: 在您的Spring Boot应用程序中,确保将db-management服务注册到Consul或其他您选择的服务注册中心。

  2. 修改路由配置: 在Gateway的路由配置中,您可以将uri的值更改为实际的服务ID,而不是lb://db-management。例如,如果您的服务ID是db-management,则可以将配置修改为:

    gateway:
      routes:
      - id: db-management
        uri: lb://db-management
        predicates:
        - Path=/management/**
    

    这将使用服务ID进行路由,并使用注册中心中可用的实例来转发流量。

  3. 验证服务注册状态: 您可以通过Consul的管理界面或API来验证服务是否已正确注册。确保服务在Consul中以正确的名称注册,并且实例的状态为“通过健康检查”。

  4. 重启Gateway: 如果您修改了配置,请尝试重启Gateway应用程序以使更改生效。

总之,确认您的服务已正确注册到Consul中,确保Gateway的路由配置使用了正确的服务ID,并确保所有的应用程序和服务实例都正常运行和可用。如果问题仍然存在,您可能需要进一步检查服务注册、命名、配置和健康状态等方面的问题。