irpas技术客

SpringCloud入门教程(全集)_TTTALK_springcloud教程

irpas 6559

文章目录 一、SpringCloud介绍二、SpringCloud子项目三、Spring Cloud实战教程1.搭建Springboot父子项目2.Feign/Ribbon/OpenFeign(1)概念介绍(2)OpenFeign的基本使用方法3.Hystrix(1)服务雪崩解决方案(2)Hystrix使用方法4.Eureka/Nacos(1)常用的几种注册中心的区别Ⅰ.Eureka与ZookeeperⅡ.Eureka与Nacos(2)Eureka搭建使用(3)Nacos搭建使用a.Nacos单机+openFiegn+Hystrixb.Nacos集群+nginx负载均衡5.Zuul(1)Zuul概念介绍(2)使用教程6.SpringSecurity/SpringCloudSecurity(1)概念介绍(2)使用教程1)SpringSecurity2) SpringSecurity + Oauth2 + redis四、SpringCloud常见报错解决1.SpringBoot和SpringCloud版本对应错误2.Eureka常见报错解决3.Nacos常见报错解决(windows版)4.Hystrix常见报错解决5.SpringSecurity报错解决6.Zuul报错解决

一、SpringCloud介绍

1.概念:Spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。 2.优缺点(主要针对微服务) (1)优点 ①每个服务足够内聚,足够小,代码容易理解、开发效率提高; ②服务之间可以独立部署,微服务架构让持续部署成为可能; ③精细度业务控制,每个服务可以各自进行负载均衡扩展和数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上; ④容易扩大开发团队,可以针对每个服务组件开发团队; ⑤提高容错性,一个服务的内存泄露并不会让整个系统瘫痪; ⑥每个服务可以用不同的技术开发,系统不会被长期限制在某个技术栈上。 (2)缺点 ①开发人员要处理分布式系统的复杂性: 设计服务之间的通信机制,需要考虑分布式事务等问题; 涉及多个服务直接的自动化测试; 服务管理的复杂性(PS:现在docker的出现适合解决这个问题); ②对于业务数据和处理能力不是很明确的创业公司,不适合微服务架构模式,这时候最重要的是快速开发、快速部署、快速试错。 3.应用场景 适合业务复杂度较大、并发量较高的场景 4.SpringCloud与Dubbo对比 (1)架构完整度上,Dubbo只有服务注册/服务治理(zookeeper)两个模块,SpringCloud已经有二十多个模块,而且还在增加; (2)SpringCloud的社区活跃度高;但Dubbo有高质量的中文文档 (3)Dubbo服务间的通讯采用的RPC,SpringCloud则是Http的Rset,RPC对业务接口有强依赖性,需要通讯双方有一样的接口,REST更为轻量化,只通过一个约定进行规范,不存在代码间的耦合。

二、SpringCloud子项目

SpringCloud的子项目一直在持续更新,这里我把SpringCloud中文网首页的直接放上来了。 详情参照:https://·blogs.com/huangwentian/p/14504473.html 总的来说,目前Nacos的功能更强大一些,Nacos = Spring Cloud Eureka + Spring Cloud Config +Spring Cloud Bus,不需要为配置中心新增集群,不需要MQ实现就能实现配置的中心动态刷新,如果考虑引入阿里巴巴生态,是一个不错的选择; 但是Eureka起步比较早,属于Spring Cloud原生全家桶,短期内更加稳定一些。

Spring Cloud Config:是一种用来动态获取Git、SVN、本地的配置文件的一种工具,为分布式系统中的外部配置提供服务器和客户端支持。官方使用说明文档:https://·/alibaba/nacos/releases Ⅱ.启动,解压后找到startup.cmd。修改startup.cmd(由于我们没配置集群,需要修改为单机启动),将set MODE = "cluster"替换为

rem set MODE="cluster" set MODE="standalone"

启动成功后访问:http://localhost:8848/nacos,用户名密码:nacos/nacosⅢ.同样的我们也需要创建nacos的注册中心和客户端。我这里直接在刚刚创建好的父子项目中添加模块nacos作为注册中心,项目结构如下

Ⅳ.相关文件代码如下,注意要把之前Eureka的依赖都注释掉,会和nacos的依赖有冲突 nacos注册中心的pom.xml:引入父模块

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://·maSeparatedStringToAuthorityList("admin"); return new User("admin",new BCryptPasswordEncoder().encode("admin123"),authList);*/ List<GrantedAuthority> authList = AuthorityUtils.commaSeparatedStringToAuthorityList("role1"); return new User("role1",new BCryptPasswordEncoder().encode("123"),authList); } }

②html类 index.html

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 登录成功! <br/> <a href="/role1/1">role1 </a> <br/> <a href="/admin/2">admin </a> </body> </html>

login.thml

<!DOCTYPE html> <html xmlns="http://·/上面解析一下,结果如下 可以看到我用的springboot2.6.3版本对应的springcloud版本为2021.0.1

2.Eureka常见报错解决

(1) Request execution failure with status code 403; retrying on another server if available Cannot execute request on any known server 报错原因:Eureka会自动配置CSRF防御机制,spring security认为post,put and delete http methods 都是有风险的, 如果这些method发送过程中没有带上CSRF token,会被直接拦截并返回403 forbidden 解决:见SpringCloudEurekaServerApplication,继承WebSecurityConfigurerAdapter放行eureka相关csrf 请求

3.Nacos常见报错解决(windows版)

(1)启动服务时报错:java.lang.IllegalArgumentException: db.num is null 报错原因:默认集群启动,而集群没有配置 解决:修改为单机启动。修改startup.cmd,将set MODE = "cluster"替换为

rem set MODE="cluster" set MODE="standalone" 4.Hystrix常见报错解决

(1)ServerPropertiesAutoConfiguration.class] cannot be opened because it does not exist 报错原因:依赖有问题 解决:spring-cloud-starter-hystrix已经被废弃了,现在应该使用spring-cloud-starter-netflix-hystrix。 如何解决类似问题呢?我这里给个基本步骤 ①进入maven网址:https://mvnrepository.com/,搜索框输入hystrix。可以看到有两个依赖。 ②点进第二个,可以看到deprecated标识,代表已经废弃了,现在使用spring-cloud-starter-netflix-hystrix (2)注入Feign接口时提示:Could not autowire. There is more than one beans of ‘UserFeign’ type 错误原因:这是IDEA工具 中spring 插件的问题 解决方法:settings -editor -Inspections- Spring-Spring Core-Code-Autowiring for Bean Class >>>>>>>> 右侧:severity 修改成warning 保存即可。

5.SpringSecurity报错解决

(1)There is no passwordEncoder mapped for the id “null” 原因:Spring Security5.0开始改变了默认的密码格式,需要要将前端传过来的密码进行某种方式加密,官方推荐的是使用bcrypt加密方式 如:

auth.inMemoryAuthentication() .withUser("admin").password("admin123").roles("admin") 改为 auth.inMemoryAuthentication() .passwordEncoder(new BCryptPasswordEncoder()) .withUser("admin").password(new BCryptPasswordEncoder().encode("admin123")).roles("admin"); 6.Zuul报错解决

(1)NoSuchMethodError: org.springframework.boot.web.servlet.error.ErrorController.getErrorPath 原因: spring-boot 较新的版本,从 ErrorController 中删除了 getErrorPath() API,但spring-cloud-starter-netflix-zuul 2.2.6.RELEASE 仍然调用此 API 并导致此错误。 解决:换较低版本的spring-boot版本或者创建BeanPostProcessor拦截 lookupHandler 方法的调用,参考我在zuul使用教程中写的ZuulConfiguration,然后在启动类引用一下就可以。

各位看官如果你已经从前看到最后了,点赞收藏一下不过分吧。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springcloud教程 #文章目录