SpringCloud踩坑

教程:尚硅谷SpringCloud(H版&alibaba)框架开发教程(大牛讲授spring cloud)

相关笔记:Spring Cloud 学习笔记

  1. 启动报错:com.alibaba.druid.pool.DruidDataSource : testWhileIdle is true, validationQuery not set

    原因:testWhileIdle属性默认为true,必须设置校验的sql(validationQuery )。

    解决:application.yml中修改配置。

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
    url: jdbc:mysql://localhost:3306/db19?characterEncoding=utf-8
    username: root
    password: 1234
    druid:
      validation-query: select 1
      test-on-borrow: false

说明:testOnBorrow=false表示不检测池中连接的可用性,生产环境一般不开启,影响性能。失效连接主要通过testWhileIdle来保证。

参考资料:https://github.com/alibaba/druid/wiki/DruidDataSource配置属性列表

  1. 80消费者采用restTemplate.postForObject请求8001创建订单,return code正常,数据库为空

    原因:restTemplate.postForObject参数为javabean,传到8001的数据为JSON,不能直接接收。

    解决:在8001的PaymentController中的create方法里添加@RequestBody注解。

 public CommonResult create(@RequestBody Payment payment){...}

没有热部署的,注意重新启动8001服务。

  1. p14工程重构出错,dependency依赖报错

    引入自定的jar包时,注意以下两点:

    解决:1、注意各个项目的gav坐标是否正确,和最开始的pom保持一致就行

Description : The artifact id of the parent project to inherit from.
Description : The group id of the parent project to inherit from.

  2、如果80正确,8001错误,查看8001的resources下的mapper文件,修改resultMap中的type,使之与cloud-api-commons包中对应的Payment路径一致。

  1. p22创建8002,加入微服务之后,采用80端口访问 http://localhost/payment/get/6,出现错误 Whitelabel Error Page

    解决:使用@LoadBalanced注解赋予RestTemplate负载均衡的能力
    cloud-consumer-order80项目中的ApplicationContextConfig.java

  如果一个正常显示,另一个不显示,查看具体错误项目中的内容,如果是找不到PaymentDao之类的,查看对应Mapper文件是否配置。

  1. p24_服务发现

  对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

  Discovery中8001的controller/PaymentController.java

  引入DiscoveryClient

import org.springframework.cloud.client.discovery.DiscoveryClient;
  1. EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.

   Eureka自我保护:当EurekaClient可以正常运行时,出现了与EurekaServer网络不通的问题时。可以防止EurekaSrever立刻将EurekaClient服务剔除的这种情况。

禁止自我保护 查看相关笔记26:Spring Cloud 学习笔记

  1. p28 支付服务注册进zookeeper
    我用的ECS云服务器,刚开始报错

java.net.ConnectException: Connection timed out: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[na:1.8.0_65]
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[na:1.8.0_65]
at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) ~[zookeeper-3.4.9.jar:3.4.9-1757313]
at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141) ~[zookeeper-3.4.9.jar:3.4.9-1757313]

首先查看本机能不能连上ECS的zookeeper的2181端口

1)、启用 telnet 客户端组件为 Ping 端口做准备

  控制面板——查看方式修改为类别,程序——打开或关闭Windows功能——Telnet客户端(注意是客户端,客户端是自己用来telnet别人端口的)

2)、利用 telnet 命令 Ping 端口的方法
  CMD——Telnet IP 端口 或者 Telnet 域名 端口

  连接失败,则需要在ECS配置相应的配置安全组策略

  端口打开的情况下,连接成功,则进入Telnet页面(全黑的),证明端口可用

  可用之后,采用正常的cloud-provider-payment8004即可注册到zookeeper

  1. SpringCloud 2.x 配置注册中心显示服务的ip地址和端口
      Eureka配置查看笔记23
      zookeeper配置如下:
zookeeper:
  connect-string: 116.62.47.51:2181 # 192.168.111.144:2181
  discovery:
    instance-host: ${spring.cloud.client.ip-address}:${server.port}

${spring.cloud.client.ip-address} ,这个类在spring-cloud-commons 项目中,因此需要引入依赖。

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-commons</artifactId>
</dependency>
  1. p30_Whitelabel Error Page

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Sat Apr 24 16:38:45 CST 2021
There was an unexpected error (type=Not Found, status=404).
No message available

此处错误仅仅是由于粗心大意造成,在OrderZKController上的注解为@RestController,不是@Controller

  1. p45_超时控制,出现错误并不是readtimeout

There was an unexpected error (type=Internal Server Error, status=500).
status 404 reading PaymentFeignService#paymentFeignTimeout()
feign.FeignException$NotFound: status 404 reading PaymentFeignService#paymentFeignTimeout()

原因:只在8001服务中写了超时程序,8002并没有超时程序
解决:8002的添加超时控制paymentFeignTimeout方法,即可成功出现

Read timed out executing GET http://CLOUD-PAYMENT-SERVICE/payment/feign/timeout

原因:OpenFeign默认等待1秒钟,超过后报错
解决:yml文件中开启客户端超时控制

#设置feign客户端超时时间(OpenFeign默认支持ribbon)(单位:毫秒)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000
  1. ERROR 12084 — [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :

日志失败分析报告程序,具体情况查看报告后面出现的Description:

例子:我是在p54出错的

A component required a bean of type ‘springcloud.service.PaymentHystrixService’ that could not be found.

PaymentHystrixService上面加了注解@Component,因为这里使用的是Feign,在主启动类OrderHystrixMain80上,注解应该是@EnableFeignClients,而不是@EnableDiscoveryClient

  1. fallback method wasn’t found: payment_Global_FallbackMethod([])

  原因:全局服务降级@DefaultProperties(defaultFallback = “paymentTimeOutFallbackMethod”)中的方法名称与自己写的善后方法名称不一致

  1. p87中的yml文件bindings里面的binder标红,但是不影响启动。但是如果将binder缩进Tab,不标红但是启动报错。

解决:将binder替换成default-binder

  1. p116设置流控规则看不到失败效果Blocked by Sentinel (flow limiting)

   原因:360浏览器用的好像是同一个线程

   解决: 1、设置线程sleep3s,这是为了有时间切换浏览器   2、采用不同的浏览器

    @GetMapping("/testA")
    public String testA()
    {
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "------testA";
    }

谷歌
在这里插入图片描述
360
在这里插入图片描述

  1. 222
  2. 2333
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值