Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调致使了样板模式, 使用Spring Cloud开发人员能够快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员本身的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。html
以上内容为官方直译
Spring Boot | 2.0.1.RELEASE |
Spring Cloud | Finchley RC1 |
SpringCloud项目基于SpringBoot,因此学习SpringCloud以前须要对SpringBoot有必定的了解。
服务发现是基于微服务架构的关键原则之一。Spring Cloud Netflix组件上的Eureka是一个服务注册与发现的模块(包含客户端和服务端)。能够将服务器配置和部署为高可用性,每一个服务器将注册服务的状态复制到其余服务器。Eureka是一个高可用的组件,它没有后端缓存,每个实例注册以后须要向注册中心发送心跳(所以能够在内存中完成)。java
1. pom.xml
中引入相关Maven依赖web
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-server --> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:
Eureka Server引入的Maven依赖中artifactId
有变更,SpringBoot2.0以前
的版本为spring-cloud-starter-eureka-server
2. SpringBoot启动器添加注解spring
@EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
3. application.yml
配置后端
spring: application: name: eureka-server server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
上述配置文件描述一个单节点注册中心,默认状况下Eureka Server也是一个Eureka Client,可经过eureka.client.registerWithEureka:false
和fetchRegistry:false
来代表本身是一个Eureka Server。默认这两个属性值为true
。
至此Eureka Server服务注册中心配置完毕。缓存
4. 运行概览图安全
启动工程,访问 http://localhost:8761
由于没有服务注册,因此显示 No Instances Available
1. pom.xml
中引入相关Maven依赖服务器
<parent> <!-- spring boot --> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <!-- netflix-eureka-client--> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley RC1</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意:
Eureka Client引入的Maven依赖中artifactId
有变更,SpringBoot2.0以前
的版本为spring-cloud-starter-eureka
2. SpringBoot启动器添加注解架构
@EnableEurekaClient @SpringBootApplication @RestController public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } @Value("${server.port}") String port; @RequestMapping("/hi") public String home(@RequestParam String name) { return "hi "+name+",i am from port:" +port; } }
在这个例子中,咱们明确地使用@EnableEurekaClient
,但只有Eureka
可用,你也可使用@EnableDiscoveryClient
。
3. application.yml
配置app
spring: application: name: service-hi server: port: 8762 eureka: client: service-url: defaultZone: ${EUREKA_SERVICE_URL:http://localhost:8761}/eureka/ management: endpoints: web: exposure: include: "*"
Eureka Client提供者只须要注明注册自身服务的服务注册中心的地址便可。当客户端注册Eureka Server时,它提供关于自身的元数据,例如主机和端口,健康指示符URL,主页等。Eureka从属于服务的每一个实例接收心跳消息。若是心跳失败超过可配置的时间表,则一般将该实例从注册表中删除。其中
defaultZone
是一个魔术字符串后备值,为任何不表示首选项的客户端提供服务URL(即它是有用的默认值)。须要指明
spring.application.name
,这个很重要,这在之后的服务与服务之间相互调用通常都是根据这个name 。
注意:
SpringBoot2.0以后
大部分endpoints
不会被暴露,上面咱们暴露了全部endpoints,如应用到生产环境,考虑到安全问题,对于Actuator的Endpoints
请根据须要进行配置
至此Eureka Client服务提供者配置完毕。
4. 运行概览图
启动工程,访问 http://localhost:8761
服务名为SERVICE-HI已经注册到注册中心。
打开 http://localhost:8762/hi?name... ,返回以下结果:
hi forezp,i am from port:8762