为了账号安全,请及时绑定邮箱和手机立即绑定

SpringCloud学习中遇到的一些bug

标签:
Spring Cloud

There was a problem with the instance info replicator

  • 错误原因: 该服务尝试将自己作为客服端注册

  • 解决办法: 在application.yml配置文件中,设置

# 注册Eureka服务eureka:
  client:    # Eureka服务注册中心会将自己作为客户端来尝试注册它自己,必須禁止
    register-with-eureka: false
    fetch-registry: false

 

回到顶部

实体类转化出错: disable SerializationFeature.FAIL_ON_EMPTY_BEANS

  • 错误原因: 使用的框架是Spring Boot,处理完请求之后,返回数据之前,在POJO转化成JSON时,有些属性违背输出规则或者有些属性循环引用会造成无法输出。

  • 解决办法: 在实体类上面加上注解

@JsonIgnoreProperties(value = { "hibernateLazyInitializer", "handler" })

 

回到顶部

This application has no explicit mapping for /error, so you are seeing this as a fallback.

  • 错误原因: 很可能是你Application启动类放的位置不对。要将Application放在最外层,也就是要包含所有子包。

  • 解决办法: 将Application放在最外层,也就是要包含所有子包。

 

回到顶部

message:Request method 'POST' not supported

There was an unexpected error (type=Internal Server Error, status=500). status 405 reading UserFeignClient#getUser(User); content: {"timestamp":"2018-09-07T09:01:14.290+0000","status":405,"error":"Method Not Allowed","message":"Request method 'POST' not supported","path":"/feign-get-user"}

  • 错误原因: 该请求不会成功,只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求。可能是我没找到相应的注解或使用方法错误。

  • 解决办法:

复制代码

    // 该请求不会成功,只要参数是复杂对象,即使指定了是GET方法,feign依然会以POST方法进行发送请求。可能是我没找到相应的注解或使用方法错误。
    @RequestMapping(method = RequestMethod.GET, value = "/feign-get-user")    public User getUser(User user);    
    //正确用法
    @RequestMapping(method = RequestMethod.GET, value = "/feign-get-user")    public User getUser(@RequestParam("id") Long id, @RequestParam("username") String username, @RequestParam("age") String age);
}

复制代码

 

回到顶部

Error creating bean with name 'eurekaAutoServiceRegistration'

org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean with name 'eurekaAutoServiceRegistration': Singleton bean creation not allowed while singletons of this factory are in destruction (Do not request a bean from a BeanFactory in a destroy method implementation!)

  • 错误原因:

    • 同一个服务重复启了;

    • 或者是端口被其他应用占用了。

  • 解决办法: 释放被占用的端口即可

 

回到顶部

Read timed out

  • 详细描述: com.sun.jersey.api.client.ClientHandlerException: java.net.SocketTimeoutException: Read timed out

  • 错误原因: 应用刚启动,需要通过ribbon从eureka上拉取服务;需要将虚拟主机名转化为ip地址

  • 解决办法: 这是比较正常的现象,只需要再次刷新就好了

 

回到顶部

解决第一次请求报超时异常的方案

 

回到顶部

Cannot execute request on any known server

  • 错误详细描述: com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

  • 错误原因: Peer Awareness配置

复制代码

# application.yml (Two Peer Aware Eureka Servers). ---spring:
  profiles: peer1
eureka:
  instance:
    hostname: peer1
  client:
    serviceUrl:
      defaultZone: http://peer2/eureka/

---spring:
  profiles: peer2
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1/eureka/

复制代码

  • 解决办法: 修改C:\Windows\System32\drivers\etc路径下的hosts文件,在文末加入以下内容:

127.0.0.1 peer1 peer2 peer3

 

回到顶部

com.netflix.client.ClientException: Load balancer does not have available server for client: microservice-provider-user

  • 错误原因: 消费者调用服务时无服务可用

  • 解决办法:

  1. 确定本机是否关闭防火墙

  2. 是否导入eureka的jar包

    <!-- 注册Eureka服务 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
  1. 确定是否导入hystrix的jar包

    <!-- 配置hystrix所需依赖的包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
  1. 确定配置文件服务前面是否有空格

    https://img1.sycdn.imooc.com//5c1e4270000172b805410070.jpg

 

回到顶部

Unable to connect to Command Metric Stream

  • 错误原因: 配置文件不完整

  • 解决办法: Hystrix Metrics Stream 要启用Hystrix度量标准流,请在spring-boot-starter-actuator上包含依赖项,并设置management.endpoints.web.exposure.include:hystrix.stream。 这样做会将 /actuator/hystrix.stream公开为管理端点,如以下示例所示:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
       
        </dependency>
        # 配置Hystrix Metrics Stream    management:
          endpoints:
            web:
              exposure:
                include: hystrix.stream

     

    • application.yml

    • pom.xml

回到顶部

hystrix.stream一直是ping

  • 错误原因:

    • 因为没有请求任何东西,所以看不到内容;

    • 缺少配置监控的依赖

    • 配置环境不完善

  • 解决办法:

    复制代码

    <!-- Actuator是SpringBoot提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息;
       如果提示 Unable to connect to Command Metric Stream.则需要引入以下包!--><dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId></dependency>

    复制代码

     # 使用Hystrix Metrics Stream必备  management:
       endpoints: 
         web:
           exposure: 
             include: hystrix.stream

     

    • 完善配置环境

    • 访问一下其他服务,比如http://localhost:9000/goods/2(自己写的一个服务)即可看到内容

    • 客服端添加依赖

回到顶部

turbine.stream一直是ping

  • 错误原因:

    # 注册Eureka服务eureka:
      client:
        register-with-eureka: false
        fetch-registry: false
    • 缺少配置监控的依赖

    • 因为没有请求任何东西,所以看不到内容;

    • 缺少配置监控的依赖

    • Eureka服务注册中心未将自己作为客户端来尝试注册它自己

  • 解决办法:

    复制代码

    <!-- Actuator是SpringBoot提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息;
       如果提示 Unable to connect to Command Metric Stream.则需要引入以下包!--><dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId></dependency>

    复制代码

    # 注册Eureka服务eureka:
      client:#    register-with-eureka: false#    fetch-registry: false
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

     

    • 添加配置的依赖(作为客服端的都需要配置)

    • Eureka服务注册中心未将自己作为客户端来尝试注册它自己

    • 访问一下其他服务,比如http://localhost:9000/goods/2(自己写的一个服务)即可看到内容

    • 客服端添加依赖

回到顶部

Health Indicator访问无结果

  • 错误原因:

    • 未导入依赖包

    • 版本原因导致访问方式改变了

  • 解决办法:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    复制代码

     {
         "_links": {
             "self": {
                 "href": "http://localhost:8030/actuator",
                 "templated": false
             },
             "health": {
                 "href": "http://localhost:8030/actuator/health",
                 "templated": false
             },
             "info": {
                 "href": "http://localhost:8030/actuator/info",
                 "templated": false
             }
         }
     }

    复制代码

    • 访问http://localhost:8030/actuator/health即可

    • 访问http://localhost:8030/actuator查看

    • 导入依赖包

 

回到顶部

Turbine监控多个服务,配置后,出现只监控到一部分服务情况

  • 错误原因:

    • 配置有问题

  • 解决办法:

    复制代码

    # 0、配置多个监控服务turbine:
      appConfig: microservice-consumer-goods-feign-with-hystrix,microservice-consumer-goods-ribbon-with-hystrix
      clusterNameExpression: "'default'"# 1、仅配置监控一个服务turbine:
      aggregator:
        clusterConfig: MICROSERVICE-CONSUMER-GOODS-RIBBON-WITH-HYSTRIX
      appConfig: microservice-consumer-goods-ribbon-with-hystrix

    复制代码

    //配置hystrix所需注解@EnableCircuitBreaker
    • 各个微服务的Controller配置 
      每个微服务均需要加上如下注解:

    • application.xml配置如下:

    • 复制代码

    • # 0、配置多个监控服务turbine:
        appConfig: microservice-consumer-goods-feign-with-hystrix,microservice-consumer-goods-ribbon-with-hystrix
        clusterNameExpression: "'default'"# 1、仅配置监控一个服务turbine:
        aggregator:
          clusterConfig: MICROSERVICE-CONSUMER-GOODS-RIBBON-WITH-HYSTRIX
        appConfig: microservice-consumer-goods-ribbon-with-hystrix
    • 复制代码

    • 各个微服务的Controller配置 
      每个微服务均需要加上如下注解:

    • //配置hystrix所需注解@EnableCircuitBreaker
原文出处:https://www.cnblogs.com/mmzs/p/10162015.html  
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消