# SpringCloud **Repository Path**: Mr_Vivian/SpringCloud ## Basic Information - **Project Name**: SpringCloud - **Description**: SpringCloud框架 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-11-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SpringCloud #### 项目介绍 SpringCloud框架 #### 软件架构 软件架构说明 1. eureka注册中心以及集群 2. 远程调用restTemplate 3. eureka自我保护机制的配置 4. DiscoveryClient模拟ribbon,实现本地负载均衡 5. Feign客户端 1.配置Feign客户的超时时间 Feign客户端默认开启负载均衡(即消费者去调用服务端的时候,轮训调用) 可能启动报错的问题: 1:启动不了可能因为@EnableFeignClients包引错了:错误包--> import org.springframework.cloud.netflix.feign.EnableFeignClients; 2:启动不了可能因为将Application启动类位置放错,不能扫描类,应该放在所有类的最外层。 2. 以类的方式进行服务降级:测试时需要注释掉hystrix被禁用的设置,以及将ribbon超时时间调低,让调用的接口走服务降级方法来进行对比 如果既用注解的方式进行服务降级,又用类的方式服务降级,默认走注解的服务降级 6. 服务保护利器:Hystrix 雪崩效应: 默认情况下tomcat只有一个线程池去处理客户端的所有服务请求,这样高并发的情况下,如果客户端所有的请求都堆积到同一个 服务接口上,就会产生所有的tomcat线程去处理该服务接口,可能导致其他接口服务无法访问(因为线程被占用完了) 可以做的事情: 1. 断路器 2. 服务降级 :返回一个友好的提示,不去处理请求,防止用户长时间等待,调用fallback方法 注意:被调用的fallback方法的参数类型,个数 必须 和调用者的方法参数类型,个数保持一致,参数名称无所谓,否则会报 com.netflix.hystrix.contrib.javanica.exception.FallbackDefinitionException: fallback method wasn't found 3. 服务熔断 :流量达到设置的阈值,自动开的服务保护功能,返回一个友好的提示,一般和服务降级一起使用。 4. 服务隔离机制 :线程池隔离 5. 服务雪崩效应 Hystrix有两种方式配置保护服务: 1. 通过注解 @HystrixCommand(fallbackMethod = "getOrderInfoFallBack") 2. 接口形式 需要配置Hystrix的超时时间,默认是1秒。如果不配置,接口处理时间超过1秒会走服务降级,但是!!!业务逻辑还会执行的!!!!!。 7. 配置中心 服务端config-server 客户端config-client 客户端启动可能会遇到的问题: Could not resolve placeholder 'userFirst' in value "${userFirst}"的两个原因 1. 可能配置文件中的 spring.application.name配置错误,需要和配置文件的前缀保持一致! 2. 当所有配置都正常的时候,但是启动报错,去 Fetching config from server at : http://localhost:8888 获取配置,因为你使用的配置为application.yml,它的 优先级不高,当需要从配置中心读取配置文件信息的时候,需要使用 bootstrap.yml 来进行配置,他的权限优先。 application.yml是用户级的资源配置项 bootstrap.yml是系统级的,优先级更高 (如果需要获取配置中心的配置资源,需要使用bootstrap.yml) 3. spring-cloud-config-client 这个依赖没有引入 参考文献:https://blog.csdn.net/hubo_88/article/details/80726901 实时获取配置文件信息(不需要从重启配置中心服务端和客户端) 1:手动刷新:有配置的类上面添加@RefreshScope注解 调用http://172.24.13.6:8060/actuator/refresh (post请求)方法 2:自动刷新(需要去监听,影响性能,不建议使用) 8. 设计一套接口考虑的问题: 接口权限(开放接口和内部接口),考虑幂等性问题,安全(https),防止篡改数据(验证签名),使用网关拦截接口实现黑名单白名单,接口使用http协议+json格式restful目的是为了跨平台 考虑高并发对接口服务实现保护:服务降级,熔断,隔离之类,使用同一API管理平台 API Swagger 9. 服务网关 Zuul 1. 如果启动报如下的错,可能因为版本兼容问题,springboot 2.1.0版本不兼容导致,更换2.0.5版本 The bean 'counterFactory', defined in class path resource [org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration$ZuulCounterFactoryConfiguration.class], could not be registered. A bean with that name has already been defined in class path resource [org/springframework/cloud/netflix/zuul/ZuulServerAutoConfiguration$ZuulMetricsConfiguration.class] and overriding is disabled. 2. Zuul默认开启Ribbon(负载均衡功能) 3. Zuul配置动态从配置中心获取路由转发配置 10. swagger配置 访问地址:http://localhost:9000/swagger-ui.html#/swagger-controller zuul整合swageer管理接口api #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 待处理问题 @EnableClients,basepackage属性的设置 @SpringBootApplication, basepackage属性的设置 Hystrix线程池数量的配置。 如果tomcat线程池设置5,那么接口如果使用服务保护,隔离的线程数是多少,目前表明隔离,但是其他接口仍然不可访问。 spring_cloud_zuul_gateway/src/main/java/io/spring/cloud/ApiGateWayApplication.java 这个类的实时刷新方法干嘛的? #### 参与贡献 1. Fork 本项目 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)