spring cloud面向开发人员,对分布式系统从编程模型上提供了强大的支持。可以说是分布式系统解决方案的全家桶,极大地降低了开发与构建分布式系统的门槛。
包括了诸如下列功能:
Netflix是一家互联网流媒体播放商,美国视频巨头,最近买下《流浪地球》,并在190多个国家播出的就是它了。随着Netflix转型为一家云计算公司,也开始积极参与开源项目。Netflix OSS(Open Source)就是由Netflix公司开发的框架,解决上了规模之后的分布式系统可能出现的一些问题。spring cloud基于spring boot,为spring boot提供Netflix OSS的集成。
这段时间对spring cloud进行了学习总结,留下点什么,好让网友上手spring cloud时少躺坑。
我用的版本如下:
spring boot不同版本之间在配置和依赖上会有差异,强烈建议创建工程后先把spring boot和spring cloud的版本依赖调整成与本篇一致,快速上手少躺坑。
上手完后,你可以尝试升到最新版本, 官方spring-cloud页 (进去后拉到最下面)提供了spring-cloud与spring-boot版本匹配表。升级完后建议重新测试一下相关功能。
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 @EnableEurekaServer public 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: false spring: application: name: eureka server: port: 8761
服务注册中心搞定,启动成功后访问 http://localhost :8761,可以看到注册中心页面:
只要启动多个注册中心进程即可,多个之间,两两注册到对方。比如,
8761端口启动一个eueka服务端,注册到8762:
eureka: client: service-url: # 提供其他注册中心的地址,注册中心将自身以客户端注册的方式注册到其他注册中心去 defaultZone: http://localhost:8762/eureka/ register-with-eureka: false fetch-registry: false server: enable-self-preservation: false spring: application: name: eureka server: port: 8761
8762端口启动一个eueka服务端,注册到8761:
eureka: client: service-url: # 提供其他注册中心的地址,注册中心将自身以客户端注册的方式注册到其他注册中心去 defaultZone: http://localhost:8761/eureka/ register-with-eureka: false fetch-registry: false server: enable-self-preservation: false spring: application: name: eureka server: port: 8762
访问 http://localhost:8761 ,可以看到8761这里有了8762的副本:
访问 http://localhost:8762 ,也是一样,你可以试试。
接下来我们用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 @EnableDiscoveryClient public 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服务注册示例,接下来我们简单模拟一个业务场景,示范微服务之间的服务调用。