spring cloud面向开发人员,对分布式系统从编程模型上提供了强大的支持。可以说是分布式系统解决方案的全家桶,极大地降低了开发与构建分布式系统的门槛。包括了诸如下列功能:Eureka服务注册发现统一配置中心Spring Cloud Stream异步调用Zuul服务网关Hystrix服务降级容错服务调用跟踪Netflix是一家互联网流媒体播放商,美国视频巨头,最近买下《流浪地球》,并在190多个国家播出的就是它了。随着Netflix转型为一家云计算公司,也开始积极参与开源项目。Netflix OSS(Open Source)就是由Netflix公司开发的框架,解决上了规模之后的分布式系统可能出现的一些问题。spring cloud基于spring boot,为spring boot提供Netflix OSS的集成。这段时间对spring cloud进行了学习总结,留下点什么,好让网友上手spring cloud时少躺坑。我用的版本如下:spring-boot 2.0.2.RELEASEspring-cloud Finchley.RELEASEspring boot不同版本之间在配置和依赖上会有差异,强烈建议创建工程后先把spring boot和spring cloud的版本依赖调整成与本篇一致,快速上手少躺坑。上手完后,你可以尝试升到最新版本,官方spring-cloud页(进去后拉到最下面)提供了spring-cloud与spring-boot版本匹配表。升级完后建议重新测试一下相关功能。Eureka服务注册与发现Eureka Server服务注册中心IntelliJ IDEA(我是2018.2.5的版本),创建工程eureka-server:File -> New->Product… -> 选择Spring Initializr -> Project SDK用1.8 -> Next -> 输入Product Metadata -> Next -> 选择Cloud Discovery -> 选择Eureka Server注意创建工程后调整spring boot和spring cloud的版本:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> <!– lookup parent from repository –></parent>…<properties> <java.version>1.8</java.version> <spring-cloud.version>Finchley.RELEASE</spring-cloud.version></properties>由于选择了Eureka Server,创建成功后pom.xml里已经帮你引入了以下依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>我们给启动类加上注解@EnableEurekaServer:package com.hicoview.eureka;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); }}配置application.yml(习惯yml风格的同学,把application.properties直接改过来):eureka: client: # 默认eureka服务注册中心会将自身作为客户端来尝试注册,所以我们需要禁用它的客户端注册行为 register-with-eureka: false # 默认30秒会更新客户端注册上来的服务清单,启动时就不获取了,不然启动会有报错,虽然不影响 fetch-registry: false server: # 关闭注册中心自我保护(默认是true,生产环境不建议关闭,去掉该配置项或改成true) enable-self-preservation: falsespring: application: name: eurekaserver: port: 8761服务注册中心搞定,启动成功后访问http://localhost:8761,可以看到注册中心页面:Eureka Server高可用只要启动多个注册中心进程即可,多个之间,两两注册到对方。比如,8761端口启动一个eueka服务端,注册到8762:eureka: client: service-url: # 提供其他注册中心的地址,注册中心将自身以客户端注册的方式注册到其他注册中心去 defaultZone: http://localhost:8762/eureka/ register-with-eureka: false fetch-registry: false server: enable-self-preservation: falsespring: application: name: eurekaserver: port: 87618762端口启动一个eueka服务端,注册到8761:eureka: client: service-url: # 提供其他注册中心的地址,注册中心将自身以客户端注册的方式注册到其他注册中心去 defaultZone: http://localhost:8761/eureka/ register-with-eureka: false fetch-registry: false server: enable-self-preservation: falsespring: application: name: eurekaserver: port: 8762访问http://localhost:8761,可以看到8761这里有了8762的副本:访问http://localhost:8762,也是一样,你可以试试。接下来我们用Eureka Client来验证下服务的注册。Eureka Client实际上充当Eureka Client角色应该是各种业务的微服务工程了,这里为了快速演示一下服务注册,临时先搞个无意义的client工程作为Eureka Client示范。创建Eureka Client工程eureka-client:File -> New->Product… -> 选择Spring Initializr -> Project SDK用1.8 -> Next -> 输入Product Metadata -> Next -> 选择Cloud Discovery -> 选择Eureka Discovery注意每次创建工程后的第一件事,改spring-boot和spring-cloud的版本,不再赘述由于选择了Eureka Discovery,创建成功后pom.xml里已经帮你引入了以下依赖:<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>修改pom.xml,还要加入web依赖,不然无法启动成功:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency>启动类加注解@EnableDiscoveryClient:package com.hicoview.client;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication@EnableDiscoveryClientpublic class ClientApplication { public static void main(String[] args) { SpringApplication.run(ClientApplication.class, args); }}配置application.yml:eureka: client: service-url: # 注册中心地址,如果注册中心是高可用,那么这里后面可以添加多个地址,逗号分开 defaultZone: http://localhost:8761/eureka/ #defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/spring: application: name: client启动成后,访问注册中心http://localhost:8761:完成了Eureka服务注册示例,接下来我们简单模拟一个业务场景,示范微服务之间的服务调用。