什么是Spring Cloud
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。
以上内容为官方直译
版本说明
Spring Boot | 2.0.1.RELEASE |
Spring Cloud | Finchley RC1 |
SpringCloud项目基于SpringBoot,所以学习SpringCloud之前需要对SpringBoot有一定的了解。
服务的注册与发现
服务发现是基于微服务架构的关键原则之一。Spring Cloud Netflix组件上的Eureka是一个服务注册与发现的模块(包含客户端和服务端)。可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器。Eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成)。
Eureka - 服务注册中心
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-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启动器添加注解
@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
Eureka - 服务提供者
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
配置
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
附加说明
- 本文参考资料
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。