Spring Boot+Spring Cloud学习难点和解决方式
导语
从EJB时代人们将大型项目分割成多个war包开始,到REST+JBoss减少EJB架构的配置文件,到SSM减少关于拦截器等配置的梳理,再到大型程序将单个SSM应用程序分割成多个WebService。Java Web应用程序的发展过程就是不断的给人减轻压力,减轻配置,减少负担,减少重复造轮子的过程。
微服务工程是是把众多框架通过一个入口集成到了自身的程序之中,让编程人员不需关注框架原理便可直接进行调用。当初的SSM类项目也是相同的思想,但是SSM类项目集成的框架过多后,配置文件数目与日俱增难以管理,而此时的Spring Boot微服务赋予了它们所需基本配置参数的大部分框架和工具,将初始配置参数的压力再次缩减。
分布式架构便是把不同的业务模块通过不同的服务器运行,曾经的多个WebService组建的SOA架构起来的项目也是相同的思想,而此时的Spring Cloud把过去的架构变得更加简便,更加轻松。
从SOA类项目开始将大型应用程序进行拆分成多个独立运行的小型应用程序,多个应用程序之间由WebService进行通信。但是每个WebService服务还要集成SSM,甚至每个服务还要做相关的管理页面和各种监控,所以每个WebService服务开发的过程都比较冗余。
微服务架构下的每个微服务和WebService一样都是独立运行的,将复杂的业务以模块的形式进行拆开,方便开发人员编写。微服务通常使用Spring Boot进行快捷开发,大部分基础信息在Spring Boot的底层之中都已经被配置好了,不像SSM一样需要写大量XML,所以每个微服务在编程的过程中都会十分的快速。
微服务分布式的职场导读
如今Spring Boot+Spring Cloud的分布式微服务项目架构,如同当年的SSM类架构一般,属于1~3年Java EE研发程序员找工作的必备技能之一。通常初级Java EE研发职位的技能要求如下所示:
- 熟练掌握Java后台编码基础技术,如:JVM、语法、GC、多线程、IO、网络编程、反射等;2.熟练掌握Spring Cloud,Spring Boot架构开发;3.熟悉Spring,SpringMVC,MyBatis框架等开源框架,最好看过其中部分源码;4.熟悉Tomcat、JBoss、Weblogic等主流应用服务器;5.熟悉HTML、CSS、JavaScript,JQuery等前段基础知识;6.熟悉Oracle或MySql数据库开发,如:SQL与存储过程;
- 熟练使用Linux系统,掌握基本Shell命令;
- 熟练掌握Redis、MongoDB;
- 熟练使用WebService主流框架,如CXF、Axis等;
- 熟练使用Maven、Git、Svn等相关版本控制工具;
目前,最潮流的架构通常用Spring Boot + Spring Cloud做程序后台,用VUE或AngrulJS做程序的前台,达到VUE+Spring Boot+Spring Cloud前后台分离的架构模式,Java程序员再不需要关心JSP等前台相关内容,都会有前端人员自行去管理,减轻了不少沟通成本,也会减轻不少编码和维护上的压力。
微服务类框架不止Spring Boot一个,还有JFinal、JBoot等国产微服务框架。
Spring Boot学习难点
其实很难说Spring Boot有任何学习上的难点,毕竟Spring Boot属于原子性整合类项目,不过是通过Spring Boot去整合各类框架、各类资源,但是Spring Boot在学习的过程中,“坑”会超多无比,毕竟由一个项目整合另外一个,所遇到的坑会很多,例如:
- 启动的时候Http路径没有路径重复错误,但是调用的时候会产生路径重复错误;
- 代码明明写的都对,但是启动Spring Boot项目报错;
- 总有些文件让Spring Boot无法扫描到;
- N多个Spring的application配置文件,到最后Spring Boot究竟听谁的?
- 好几种不同的启动参数,到最后Spring Boot按照谁的执行?
- Spring Boot为什么会有端口最大限制?
- YAML文件明明和别人的写的一模一样,为什么我的就报错了?
- ...
Spring Cloud学习难点
Spring Cloud的学习难点有很多,主要分为两个方面,第一个方面是对分布式的理解和整体项目的搭建、应用。第二个方面是代码中也存在着一些细小的坑。
细小的坑例如:
- Feign调用时候,为什么调用带有”-”的程序会发生报错?
- Swagger与Feign版本怎么还会冲突?
- Feign的拦截器为什么生效了两次?
搭建的难点例如:
- 我已经按照操作步骤搭建好了Consul集群,但是为何注册在其中一个Consul上之后,集群中的其它Consul无法读取我这个Spring Boot相关的信息。
- 为什么会出现Quartz这种分布式任务调度?原因是什么?和别的分布式内容不同,这也不是个中间件啊。
- 我的FastDFS分布式文件管理系统究竟哪里搭建的不对,导致一直没有正确存储上。
- ...
4解决学习困难的方式
解决Spring Boot + Spring Cloud学习困难的方式有很多,例如没事勤翻百度、问老师、问同学、问QQ群友。但是这种学习效率低下,而且不成系统,很难说有人从百度、QQ群里可以知道整体错误的原因,内容,和来龙去脉。
但是电子工业出版社出版的《微服务分布式架构基础与实战 基于Spring Boot + Spring Cloud》(作者:张方兴)一书中,分别含有实例制作与实例易错点两个方面。
在实例制作上,该书将Spring Boot + Spring Cloud各方面技术细节进行拆分,并以解决方案的方式让读者可以轻松弄懂每一个实例的每一个步骤,与每一个实例的最终输出结果,其实例包括例如:
- 通过单个、多个配置文件,让Spring Boot微服务适应多种不同的搭建环境与应用场景;
- 注册中心Consul的集群搭建,并使用Spring Boot Feign的方式进行相互调用;
- Spring Boot整合Redis与MySql达到缓存与持久化的一致性;
- Feign与Hystrix的熔断、降级、回退;
- Spring Boot的异步线程池及基本应用;
- Spring Boot的分布式消息;
- Spring Boot的文件上传与FastDFS分布式文件管理系统;
- Spring Boot的任务调度与Quartz分布式任务调度;
- Spring Boot的客户端负载均衡;
- ...
在实例易错点上,《微服务分布式架构基础与实战 基于Spring Boot + Spring Cloud》一书在每一个所编写的实例之后,都有对该实例可能出现的错误进行统计,并且对错误的原因及更改方式进行一一描述。例如对上述Spring Boot和Spring Cloud的错误修改有:
- 启动的时候Http路径没有路径重复错误,但是调用的时候会产生路径重复错误;——这种情况很可能出现了如下形式的接口。
@RequestMapping(“/path/{pathget1}”)
@RequestMapping(“/path/{pathget2}”)
通过get方式进行URL拼接获取数据的方式,切记不要使用相同的get地址,否则会出现报错的情况。
- 代码明明写的都对但是发生了启动报错的情况——有可能是main方法的类头上没有编写@SpringBootApplication或相关注解,书上对缺少每种注解可能发生的报错进行了详细的说明。例如编写@SpringCloudApplication出现错误会出现什么样的提示。
- 总有些文件没有被扫描到——可能是.java文件存放的路径不对,或者编写了@ComponentScan自行扫描的注解,但是并没有扫描到相关文件。
- N多个Spring Boot的application配置文件,到最后Spring Boot究竟听谁的?——根据application配置文件的权重不同,如果出现多个相同的则会选择权重最高的,如果出现application-dev.properties、application-uat.properties等的文件,就查找application.properties文件中的指向。
- 好几种不同的启动参数,到最后Spring Boot按照谁的执行?——启动参数也有权重,优先根据权重最高的进行启动。
- Spring Boot为什么会有端口最大限制?——因为short限制的,端口为无符号的short类型,范围为1~65535。并且在Linux系统之中,1~1023范围默认只有ROOT用户才有权限进行操作,所以普通用户可操作区间为1025~65535约6万个,所以在端口设置为99999时将会报错,且无法启动Spring Boot。
- YAML文件明明和别人的写的一模一样,为什么我的就报错了?——这是一个初学者很常见的错误,尤其是YAML文件只能使用两个空格的方式进行缩进,如果使用了TAB进行缩进的话,就会产生报错现象产生。
后面的问题在《微服务分布式架构基础与实战——基于Spring Boot + Spring Cloud》书中也可以一一对应找到答案,并且书里对各个不同可能出现的问题进行整理,其整理的内容远远超过上述的寥寥几句,很多易错点涉及到的知识体系也都有完整解读,该书尽可能达到买完这本书就可以独自编写Spring Boot + Spring Cloud项目。这种学习方式比问百度、问老师、问同学、问同事、问群友,效率高太多了。在书里每一个实例都是完全可以运行的,从头到尾就连引包的代码都没有省略,认真敲代码不可能出现学不会的情况产生。
《微服务分布式架构基础与实战——基于Spring Boot + Spring Cloud》一书以分布式架构 + 微服务实例的方式介绍Spring Boot + Spring Cloud的基础知识、架构顺序、操作方式,通过前6章的讲解可基本搭建出Consul 集群 + 多个微服务 + 微服务间通信 + 负载均衡 + 断路器的分布式基本结构,通过后续章节对微服务进行业务代码的编写,其中包括 Spring Boot + MySQL + Redis + 缓存一致性 + 事务 + 异步线程池 +分布式消息通信 + 分布式任务调度管理 + FastDFS分布式文件管理。
《微服务分布式架构基础与实战——基于Spring Boot + Spring Cloud》一书偏向实战,无论读者是初学者、在校生、开发人员、架构师,看完即可从零自行架构微服务的分布式系统。请认准“电子工业出版社旗舰店”购买正版书籍。
长按识别查看详情
也可以加到QQ群里,大家一起扯淡聊天一起学习!QQ群号:1074468813
来让我们一起前进一起进步!!!QQ群:1074468813
本文转自公众号:北漂程序员的吐槽人生
作者:张方兴0451
本文仅做分享使用,版权等归原出处所有
侵删
长
按
关
注
知否智否
分享知识,分享生活