本文编写于 175 天前,最后修改于 175 天前,其中某些信息可能已经过时。

上一篇我们讲解了微服务的介绍以及定义,下面我们来正式学习基于Java的微服务框架SpringCloud。
本篇来详细介绍SpringCloud框架的相关技术知识,方便大家从宏观上了解SpringCloud框架。
http://blog.zh66.club/index.php/archives/66/

一、什么是微服务

SpringCloud虽然带有“Cloud”(云)的字样,但实际上它并不是一个云计算的解决方案,这点要搞清楚。
SpringCloud是一个在SpringBoot基础上进行快速构建分布式系统的工具集,也可以理解为整合了各项构建微服务技术的“全家桶”。

二、SpringCloud版本

我们知道,Spring的版本(例如4.0.1.RELEASE)都是以“a.b.c.d”这种格式来设置的,其中“a”为主版本,“b”为副版本,“c”为变量版本,“d”是里程碑版本(如RELEASE为“释出版”即正式版本)。
而SpringCloud版本与以往Spring的版本格式有所不同,我们打开SpringCloud官网(https://spring.io/projects/spring-cloud#learn),在右侧的“Learn”有SpringCloud的最新的相关版本:


其中Hoxton、Greenwich、Finchley为英国的某个城市地名或地铁站名,而“SR”为“Service Release”版本,即Bug修复的版本。

三、SpringCloud特点

SpringCloud有以下6个比较明显的特点,其中第1和第2个特点是SpringBoot提供的。
1.约定优于配置
SpringCloud是基于SringBoot搭建的,而SpringBoot完全舍弃了传统的XML配置,按照约定进行编程,减少软件开发人员所需要做出的决定的数量,也大量的减少了配置文件的使用。

2.开箱即用,快速启动
SpringCloud能够满足一定的配置、启动需求,直接部署、运行即可。

3.适用于各种环境
SpringCloud构建的服务可以部署到PC Server上,也可以部署在阿里云、AWS云等等云环境,也可以是Docker等容器环境中。

4.轻量级的组件
SpringCloud的每一个微服务开发组件都是轻量级的,例如“服务发现”,SpringCloud提供了Eureka,是一个很轻量即的组件,只需要简单的配置,就可以运行一个服务发现的注册中心。

5.组件的支持很丰富,功能很齐全
微服务的理念是“分而治之”,希望通过一些通用的模式来简化我们的开发,提升系统的伸缩能力。所以SpringCloud拥有构建完整分布式系统需要的所有组件,例如“注册中心”、“熔断器”、“配置中心”以及“智能路由”等,来服务微服务的方方面面。

6.选型中立
对于某种组件,会提供多种技术选型供开发者选择,不去特意绑定某种技术栈,比较中立。例如“注册中心”,SpringCloud提供了多种支持,比如“Eureka”、“Zookeeper”或“Consul”。

四、需要的技术储备
我们开发SpringCloud需要哪些技术储备呢?

1.开发语言
因为SpringCloud是基础Java语言编写的,所以掌握Java语言是必须的。当然,也支持Scala、Groovy等基于JVM(Java虚拟机)的敏捷开发语言。

2.构建工具
使用常用的Maven或者是Gradle代码构建工具进行工程的构建。

3.SpringBoot
SpringCloud是基于SpringBoot进行构建的,所以需要掌握很多SpringBoot的规则和规范。
想要了解SpringBoot的同学,参见SpringBoot学习专栏:
【SpringBoot专栏】https://blog.csdn.net/u013517797/column/info/31719

五、使用的软件版本
这里使用软件版本的原则是,使用最新的版本。
1.JDK                 【JDK1.8】
2.Maven             【Maven3.6.1】
3.IDE                  【IDEA、Spring Tool Suite 3.8.2】
4.Spring Boot     【2.2.0 SNAPSHOT】
5.Spring Cloud   【Greenwich SR1】
建议:大家按照学习时,尽量使用相同的版本进行选择,避免采坑。

后期补充:上面使用的Greenwich.SR1的2.2.0.BUILD-SNAPSHOT版本,虽然版本比较新,但是由于该版本是快照版,不是RELEASE稳定正式释出版,所以在后面的开发中,笔者遇到了很多问题,所以改为使用Finchley.SR2的2.0.6.RELEASE版本。(也告诫大家在正式环境中一定要使用RELEASE版本)