做者 : Stanley 罗昊java
注:做者使用IDEA + Gradleweb
注:须要有必定的java&&SpringBoot或SSM基础redis
其实springcloud是基于springboot,在springboot基础之上加入了一些第三方的组件或是一些本身的组件,进行了一个分布式的扩展;spring
固然,它的组件很是多,在接下来的博文分享中,我将会陆续连载出来比较重要的一些组件;tomcat
注册中心、注册中心 服务器、系统健康检查、安全检查、分布式配置、分布式配置服务器、熔断器、分布式链路跟踪、分布式日志收集、分布式网关;安全
为何要有注册中心?springboot
咱们就拿电商举例;在早起开发中,一个大的项目分别由功能模块组成,好比淘宝,你有一个登录,还有注册,购买,支付等功能,这些一个个小的模块,组成了一个大的项目,可是其中的一个小模块出现问题,那么整个项目都将被迫关闭服务器进行维护,为了解决这个问题,这些年愈来愈多的企业开始使用微服务分布式这个框架来解决这个问题,好比当你的注册模块出问题了,并不影响其余模块,你注册出问题,我登陆照样正常,只不过注册我线关闭服务罢了;服务器
这一个个小的模块就被称之为“服务”,可是服务与服务以前是须要相互调用,这个时候就须要注册中心做为中介同样,把这些一个个服务注册进来,进来后我帮大家进行链接,当服务器a想调用服务b的时候,服务器a仅须要在注册中心找服务b便可,而不是直接向服务b索要;app
因此,咱们在开发过程当中,须要将咱们写好的每个功能模块(服务)都朝注册中心注册一下,可是注册中心可无论大家谁调用谁,它只管注册与发现,固然在你注册的时候,须要把服务的名称告诉注册中心,否则那么多服务,谁知道这些服务都是干吗的;负载均衡
全部服务都向注册中心注册,事实上注册中心已经搭好了一个Map,key就是你的服务名称(项目名),value就是服务的端口号,由于咱们在注册的时候,不但要告诉项目名称,固然也须要告诉咱们的ip地址;
首先,咱们须要新建一个项目,这里我选用了Gradle,由于比较方便好用,我的感受Maven太过繁琐笨重;
建立好项目后,接下来,咱们须要在build.gradle文件中进行一些配置,这些配置我就不一一讲解了,因此须要有boot的基础;
apply plugin: 'java' apply plugin: 'spring-boot' sourceCompatibility = 1.8 dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' } //在编译构建时的配置 buildscript { ext { //定义一个变量,统一规定springboot的版本 springBootVersion = '1.5.10.RELEASE' } repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } jcenter() mavenCentral() //spring repo maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } maven { url "http://repo.spring.io/release" } maven { url "http://repo.spring.io/plugins-snapshot" } } dependencies {//用来打包 classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") } } //统一全部项目的配置 allprojects { group 'com.lh' version '1.0-SNAPSHOT' ext { springCloudVersion = 'Edgware.SR2' } repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } jcenter() mavenCentral() //spring repo maven { url "http://repo.spring.io/snapshot" } maven { url "http://repo.spring.io/milestone" } maven { url "http://repo.spring.io/release" } maven { url "http://repo.spring.io/plugins-snapshot" } } //指定编码格式 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } } //统一子项目的配置,仅对子项目生效 subprojects { apply plugin: 'java' apply plugin: 'idea' apply plugin: 'spring-boot' dependencies { compile('org.springframework.boot:spring-boot-starter-web') { //移出tomcat exclude module: "spring-boot-starter-tomcat" } //undertow(性能比tomcat好,吞吐量大) compile 'org.springframework.boot:spring-boot-starter-undertow' //健康检查 compile 'org.springframework.boot:spring-boot-starter-actuator' //集成Redis compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-redis' testCompile( group: 'junit', name: 'junit', version: '4.12' ) } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } }
配置完成后点击导入,请耐心等待他下载完环境以及jar包:
在咱们刚刚建立好的项目上右键,选择New-》Module;
到这里有有些疑惑了,为何要在项目中,再建立一个项目呢?
由于,咱们如今的这些操做,实际上就是微服务,咱们把一个大的项目进行了拆分,分红了一个个小的项目(也被称之为,“子项目”),能够把他们理解HTML中的DIV,咱们如今建的是一个最外层的DIV,咱们准备建的是大DIV里面中的小DIV;
在选择Module后勾选Gradle跟Java点击NEXT,而后给这个模块起个名字,也就是给这个服务起个名字;
创建完模块后,咱们接下来就把这个模块当作一个注册中心,没错,日后的项目,咱们都须要朝着它进行注册;
在这个Module项目结构下(我这个模块的名称是:reigster-center)点击build.gradle这个配置文件中,进行一个简单的配置;
刚才我说了,咱们须要把这个模块作成一个注册中心,因此咱们须要在build.gradle引入一个jar包来配置注册中心所具有的条件;
build.gradle里的配置:
dependencies { //eureak:注册中心,服务器 compile 'org.springframework.cloud:spring-cloud-starter-eureka-server' }
导入成功后,接下来,咱们须要在项目的src-main-resources目录下建立一个yml配置文件:
配置文件内容:
server: port: 8080 spring: application: name: reigster-center eureka: client: register-with-eureka: false #启动时不注册,来表示本身是一个注册中心 fetch-registry: false #不在注册中心拉取数据 service-url: defaultZone: http://localhost:8081/eureka/,http://localhost:8080/eureka/,http://localhost:8082/eureka/ server: enable-self-preservation: true #是否开启eureka服务器的自我保护
首先,8080就是咱们注册中心的端口号,咱们访问的时候,也须要在地址栏输入8080;
name 表明你的服务名称,这里写本身的项目名称便可;
register-with-eureka: true #启动时不注册,来表示本身是一个注册中心 fetch-registry: true #不在注册中心拉取数据
若是是其余项目,咱们须要向注册中心请求资源,获取数据,可是注册中心不须要,由于我本身就是一个注册中心,我何须具有这些功能,因此这里就把一些功能关闭
能够看到,下面编写了许多的端口号,这里面的每个地址都是一个注册中心,在启动的时候进行相互注册,若是其中一个注册中心出现故障,那么另外两个顶替,从而也实现了负载均衡与集群;
自我保护我会在后面的文章中会重点介绍;
当以上配置均完成后,咱们开始编写启动类,先看下我点项目结构:
在java目录下建立一个包,表明这个包只存放启动类;
在包中编写启动类(RegisterCenterProvider)用于启动注册中心:
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class RegisterCenterProvider { public static void main(String [] args){ SpringApplication.run(RegisterCenterProvider.class,args); } }
启动注册中心
准备工做完成后,咱们只需运行启动类便可启动注册中心;
无需编写其余代码;
准备启动时,先看一下本身的注册中心端口号,个人是8080,这里能够随便写,可是要注意,不要写重复了;
下面,咱们直接在地址栏输入请求地址便可;
划红线的那一栏就代表你所注册进来的服务;
今日感悟:
一件东西越难得到,每每它的价值就越高;
作人也是如此,若是你老是轻易的答应别人;
甚至讨好别人,那,你的自身价值也就越低廉