Jia_Li_z 2020-02-23 17:02 采纳率: 50%
浏览 1487

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
  • 写回答

1条回答 默认 最新

  • 大大怪打LZR 2023-08-13 21:48
    关注

    您的问题似乎是由于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,并确保所有的应用程序和服务实例都正常运行和可用。如果问题仍然存在,您可能需要进一步检查服务注册、命名、配置和健康状态等方面的问题。

    评论

报告相同问题?

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题