• 最全解决:微服务之间调用出现Load balancer does not have available server for client


    问题:

    背景:现在是一个服务A要调用服务B(media-api)中的方法上传文件,因此需要再服务A中写一个feignclient,里面包含的是要调用的B服务的方法,然后出现找不到目标的情况

    问题分析:

    首先要确保服务和要被调用的服务都已经注册上,这里我用的是nacos。可以看到都是正常注册上来了的。

    然后检查自己有没有写错对应的服务名称,看看对应的调用请求是否有错。

    然后点击在第一个出问题的地方点进去,在该方法上打个断点看看打下来的请求有没有问题,

    在这发现uri请求应该是没有问题的,看到这的/media后面才发现是我网关没有启动 

    正常就应该打到网关,然后网关进行负载均衡的转到media-api服务 

    而media-api服务下的配置就是

    问题解决:

    方案一:将服务注册上

    可以试试看用eureka进行注册。nacos和erueka都是进行注册的,选择一种方案注册服务即可。

    先pom配置

    1. <dependency>
    2. <groupId>org.springframework.cloud</groupId>
    3. <artifactId>spring-cloud-starter-eureka</artifactId>
    4. </dependency>

    然后application上或者nacos上进行配置

    1. ribbon:
    2. eureka:
    3. ​ enabled: true

    方案二:取消eurka

    如果你用nacos注册上,但还是报错。可以试试将eureka取消 ribbon.eureka.enabled=false;

    1. ribbon:
    2. ConnectTimeout: 60000 #连接超时时间
    3. ReadTimeout: 60000 #读超时时间
    4. MaxAutoRetries: 0 #重试次数
    5. MaxAutoRetriesNextServer: 1 #切换实例的重试次数
    6. eureka:
    7. ​ enabled: false

    或者配置这个,这个就是禁用eureka然后将请求打到下面的服务提供者下,但这种写法比较固定。

    大部分情况不是我们想要的

    1. ribbon:
    2. eureka:
    3. enabled: false
    4. ## 这个IFeignService是加了@FeignClient注解的类
    5. MediaServiceClient:
    6. ribbon:
    7. ## 服务提供者的地址,不是服务注册中心的地址
    8. listOfServers: http://localhost:60350

    或者这个

    1. eureka:
    2. client:
    3. register-with-eureka: false #此EurekaServer不再注册到其他注册中心
    4. fetch-registry: false #不再从其他注册中心拉取服务信息

    方案三:检查拼写

    看看自己的要调用的服务名字有没有写错,和注册上nacos的名字是否一致。

    然后检查自己的请求是否有错误,请求有错也是没有办法找到该服务的。看看自己的nginx,网关等有没有打开

  • 相关阅读:
    牛客网刷题——JAVA
    【DevOps】Git 图文详解(六):Git 利器 - 分支
    [题] 最大异或对 #字典树 #异或
    从-99打造Sentinel高可用集群限流中间件
    推荐系统笔记(十五):pytorch/tensorflow添加随机均匀噪声
    算法设计作业
    grpc-java源码环境编译
    设计模式-中介者模式
    sign签名发送
    法国博士后奖学金有哪些类型?
  • 原文地址:https://blog.csdn.net/m0_62314761/article/details/133603896