本章介绍了服务注册中心Eureka的使用攻略,包括设置服务注册中心、服务注册与发现、引用负载均衡器、断路器Hystrix以及处理故障和延迟。
服务发现
微服务编程思想
单片应用程序看似简单,但却存在一些挑战:
- 理解难:随着代码基数越大
- 测试难
- 容易发生lib库冲突
- 效率低下
- 技术更新难:技术决策要考虑整个应用程序
- 上生产难:需要大量的人力物力测试
应用架构、微服务架构有以下特点:
- 容易理解
- 容易测试
- 微服务不太可能受到库不兼容的影响
- 微服务是独立伸缩的
- 每个微服务都能独立技术选型
- 微服务可以更频繁地发布到生产环境中
设置服务注册中心
Spring Cloud是一个相当大的伞形项目,由几个独立的子项目组成,每个子项目都以某种方式支持微服务开发。其中一个子项目是Spring Cloud Netflix,它提供了来自Netflix开放源代码组合的几个组件,其中包含一个Spring twist。其中包括Netflix服务注册中心Eureka。
Eureka服务注册和发现图:
为什么使用客户端负载均衡器
通常,负载平衡器被认为是一个单独的集中式服务,它处理所有请求并将它们分布到目标的多个实例上。相比之下,Ribbon是一个客户端负载均衡器,对于每个发出请求的客户端都是本地的。
优点:
- 因为每个客户机都有一个本地负载均衡器,所以负载均衡器自然地与客户机的数量成比例。
- 可以将每个负载均衡器配置为采用最适合每个客户机的负载平衡算法,而不是对所有服务应用相同的配置。
步骤:
添加依赖
[代码块] 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22<properties>
...
<spring-cloud.version>Finchley.SR1</spring-cloud.version>
</properties>
...
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>启用Eureka服务器。
打开应用程序的主引导类,并使用@EnableEurekaServer注释它。[代码块] 1
2
3
4
5
6
7
public class ServiceRegistryApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistryApplication.class, args);
}
}测试
配置Eureka
1 | eureka: |
1 | server: |
1 | eureka: |
扩展Eureka
使用Spring配置文件为两个对等点配置Eureka:
注册和发现服务
配置Eureka客户端属性
消费服务
- RestTemplate
- Feign-generated客户端接口
使用RestTemplate:
使用Feign-generated客户端接口:
配置管理
共享配置
Spring Cloud Config Server提供了一个集中式的配置,一个应用程序中的所有微服务都可以依赖该服务器进行配置。因为它是集中式的,所以它是所有服务中通用的配置一站式服务,但是它也能够提供特定于给定服务的配置。
运行配置服务器
Spring Cloud Config Server为配置数据提供了一个集中的源。
启用config服务器
填充配置存储库
使用共享的配置
服务于特定于应用程序和特定于配置文件的属性
利用spring.application.name属性来指定对应服务的配置文件。
不同服务使用独立的配置文件
使用profiles属性切换配置文件
对配置属性保密
动态刷新配置属性
手动刷新
自动刷新
- 创建WEBHOOK
- 在配置服务器中处理WEBHOOK更新
- 创建GOGS通知提取器
- 在配置服务器客户端启用自动刷新
处理故障和延迟
了解断路器
在为他们的断路器实现起名字的时候,Netflix的开发人员想要一个能抓住弹性、防御和容错的名字。他们选定了海斯特里克斯(Hystrix),这是一种被称为“旧世界豪猪”(Old-World porcupine)的动物,这种动物的特点是能够用长刺自卫。
常见异常:
- 调用REST的方法
- 执行数据库查询的方法
- 潜在的慢方法
定义断路器
管理断路器阀值: