SpringCloud自学教程(篇一)

近日由于项目需要,研究了一段时间SpringCloud,在学习的过程中遇到很多问题,写篇博客记录下来,希望可以对后来者起到一点帮助,由于本人水平有限,文中有不当之处,欢迎批评指正。

什么是SpringCloud?
作为新一代微服务框架的翘楚,它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

读到这里你应该知道了,想要学会SpringCloud,需要先对SpringBoot有所了解,如果你还不了解SpringBoot,那么就跟随我建立你的第一个SpringBoot项目吧

首先打开你的IDE,这里使用的是IntelliJ IDEA,如果你还没有用过,建议尝试,点击File–>New–>Project
SpringCloud自学教程(篇一)_第1张图片
点击下一步,填写Group和Artifact,可根据个人喜好随意填写,不过一般遵循原则,Group一般按照公司域名倒序填写,Artifact一般为应用简称
SpringCloud自学教程(篇一)_第2张图片
到这一步后,一直点击下一步完成即可,至此,一个springBoot项目就建好啦
接下来,配置Maven,点击File–>Setings,搜索maven,进行maven配置
SpringCloud自学教程(篇一)_第3张图片
这里需要注意,如果不使用idea默认的maven,需要把默认的配置文件及本地仓库覆盖掉,换成想要存放的路径,点击override即可,至此,一个springBoot项目就完成了。

建好的springBoot项目,你会发现左侧的项目栏会有很多无用的文件,我们先将这些无用的文件隐藏,点击File–>Setings
SpringCloud自学教程(篇一)_第4张图片
在右下方输入你不想看到的文件后缀名即可,这样我们的项目算是比较清爽了,项目结构如下

SpringCloud自学教程(篇一)_第5张图片

主要的pom文件
SpringCloud自学教程(篇一)_第6张图片

打开Application,这个类中有一个main方法,这是SpringBoot项目的主程序入口,运行main方法即可启动SpringBoot项目,SpringBoot项目内嵌了一个Tomcat,所以不需要再配置,此类是自动生成的,类中标注了一@SpringBootApplication注解,此注解会通知Spring这是一个SpringBoot项目,在项目初始化时会按照SpringBoot的方式加载资源文件,同时我们写一个方法,向前台返回一个字符串,至此,我们没有写一行的配置文件,即可实现前后台的通信
SpringCloud自学教程(篇一)_第7张图片

启动项目,打开浏览器,访问http://localhost:8080/hi,即可看到浏览器中显示的内容,8080是默认的端口,如果想修改,在application.properties中把server.port值修改即可
SpringCloud自学教程(篇一)_第8张图片

至此,使用SpringBoot实现一个简单的前后台调用就已经完成了,我们可以在application.properties自定义一些配置,如数据源,日志,及整合其他的一些框架等配置,在后期的博客我会慢慢讲到,此篇文章的重点是SpringCloud,我们可以在学习SpringCloud时慢慢学习SpringBoot

为什么要使用SpringCloud?
众所周知,一个大的项目经常由很多模块组成,这给后期的应用发布及部署造成了很多麻烦,一旦项目某个模块出现问题,可能会导致整个应用的瘫痪,如果我们能将每个模块分开部署,使模块之间可以相互调用,并将每个模块集群化,实现负载均衡,这就大大提高了系统的安全性,同时如果有新版本需要更新,只需更新相对于的服务即可,这一个个的服务,我们统称微服务,SpringCloud的存在,旨在解决这样的问题

接下来,我们学习SpringCloud第一篇,使用Eureka实现服务的注册与发现

什么是Eureka?
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

我们新建一个maven项目进行演示,打开IntelliJ IDEA,File–>New–>Project,新建一个maven项目,此maven项目作为一个父工程,下面的module均依赖此父工程,maven工程结构如下
SpringCloud自学教程(篇一)_第9张图片

下面,我们依赖此工程,新建一个EurekaServer作为服务注册中心,选中项目,new–>module选择Spring Initializr新建一个SpringBoot 项目
SpringCloud自学教程(篇一)_第10张图片
点击下一步,填写groupId和artifactId ,继续下一步,选中cloud discovery->eureka server
SpringCloud自学教程(篇一)_第11张图片

继续点击下一步,直至完成即可
SpringCloud自学教程(篇一)_第12张图片

打开SpringBoot自动生成的工程启动类,在类上添加@EnableEurekaServer注解,标注此工程是一个服务注册中心
SpringCloud自学教程(篇一)_第13张图片

打开resource下的application.yml文件,也可能是application.properties,这两个后缀名SpriingBoot均支持识别,注意此配置文件名不可更改,且后缀名只能为yml或者properties,在此配置文件中写配置如下SpringCloud自学教程(篇一)_第14张图片
其中port为此服务的端口号, application:name为服务名,fetchRegistry: false, registerWithEureka: false表明此工程为一个注册中心,serviceUrl代表注册中心的地址,注册中心地址有图形化界面,启动项目,访问localhost:8888
SpringCloud自学教程(篇一)_第15张图片
我们可以看到,Application显示No instances available ,代表还没有实例向注册中心注册,接下来我们写一个服务提供者,向注册中心注册服务

创建一个Module,创建过程和eureka-server类似,添加cloud discovery->eureka discovery即可
SpringCloud自学教程(篇一)_第16张图片
在SpringBoot生成的启动类中加上@EnableEurekaClient注解,表名此服务是一个服务提供者,接下来,我们需要将此服务提交到注册中心

SpringCloud自学教程(篇一)_第17张图片

打开application.properties,server.port: 8881设置端口,application.name设置服务名,eureka.client.serviceUrl.defaultZone 后面写上注册中心的服务地址即可,即可将此服务提交到注册中心
SpringCloud自学教程(篇一)_第18张图片
启动项目,访问localhost:8888,我们会发现已经有一个服务被注册,服务名为eureka-client,端口为8881
SpringCloud自学教程(篇一)_第19张图片

至此,一个服务注册与发现就完成了,下一个章节会分享如何集群化服务提供者及服务之间的相互调用。有疑问的朋友,可发邮件与我联系
邮件地址:[email protected]

你可能感兴趣的:(java)