Spring Cloud Eureka:服务注册与发现
摘要
Spring Cloud Eureka是Spring Cloud Netflix 子项目的核心组件之一,主要用于微服务架构中的服务治理。
Eureka简介
在微服务架构中往往会有一个注册中心,每个微服务都会向注册中心去注册自己的地址及端口信息,注册中心维护着服务名称与服务实例的对应关系。每个微服务都会定时从注册中心获取服务列表,同时汇报自己的运行情况,这样当有的服务需要调用其他服务时,就可以从自己获取到的服务列表中获取实例地址进行调用,Eureka实现了这套服务注册与发现机制。
搭建Eureka注册中心
创建一个eureka-server模块
pom.xml文件
1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <parent>
7 <groupId>org.springframework.boot</groupId>
8 <artifactId>spring-boot-starter-parent</artifactId>
9 <version>2.2.2.RELEASE</version>
10 <relativePath/> <!-- lookup parent from repository -->
11 </parent>
12
13
14 <groupId>com.reno</groupId>
15 <artifactId>springcloud.eureka</artifactId>
16 <version>1.0</version>
17 <name>springcloud.eureka</name>
18 <packaging>jar</packaging>
19 <description>springcloud.eureka</description>
20
21
22 <properties>
23 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
24 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
25 <java.version>1.8</java.version>
26 <spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
27 </properties>
28
29
30 <dependencies>
31 <dependency>
32 <groupId>org.springframework.boot</groupId>
33 <artifactId>spring-boot-starter</artifactId>
34 </dependency>
35
36 <dependency>
37 <groupId>org.springframework.boot</groupId>
38 <artifactId>spring-boot-starter-test</artifactId>
39 <scope>test</scope>
40 </dependency>
41
42 <dependency>
43 <groupId>org.springframework.boot</groupId>
44 <artifactId>spring-boot-starter-web</artifactId>
45 </dependency>
46
47 <dependency>
48 <groupId>org.springframework.cloud</groupId>
49 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
50 </dependency>
51 <dependency>
52 <groupId>org.springframework.cloud</groupId>
53 <artifactId>spring-cloud-netflix-eureka-server</artifactId>
54 <version>2.2.0.RELEASE</version>
55 </dependency>
56
57
58 <dependency>
59 <groupId>org.projectlombok</groupId>
60 <artifactId>lombok</artifactId>
61 </dependency>
62
63
64 </dependencies>
65
66
67 <dependencyManagement>
68 <dependencies>
69 <dependency>
70 <groupId>org.springframework.cloud</groupId>
71 <artifactId>spring-cloud-dependencies</artifactId>
72 <version>${spring-cloud.version}</version>
73 <type>pom</type>
74 <scope>import</scope>
75 </dependency>
76 </dependencies>
77 </dependencyManagement>
78
79
80
81 <repositories>
82 <repository>
83 <id>spring-milestones</id>
84 <name>Spring Milestones</name>
85 <url>https://repo.spring.io/milestone</url>
86 <snapshots>
87 <enabled>false</enabled>
88 </snapshots>
89 </repository>
90 </repositories>
91
92
93 <build>
94 <plugins>
95 <plugin>
96 <groupId>org.springframework.boot</groupId>
97 <artifactId>spring-boot-maven-plugin</artifactId>
98 </plugin>
99 </plugins>
100 </build>
101
102 </project>
yml文件
1 server:
2 port: 38761
3
4 spring:
5 application:
6 name: eureka-server
7
8 eureka:
9 instance:
10 hostname: localhost
11 server:
12 wait-time-in-ms-when-sync-empty: 0 #在eureka服务器获取不到集群里对等服务器上的实例时,需要等待的时间,单机默认0
13 shouldUseReadOnlyResponseCache: true #eureka是CAP理论种基于AP策略,为了保证强一致性关闭此切换CP 默认不关闭 false关闭
14 enable-self-preservation: false #关闭服务器自我保护,客户端心跳检测15分钟内错误达到80%服务会保护,导致别人还认为是好用的服务
15 eviction-interval-timer-in-ms: 60000 #清理间隔(单位毫秒,默认是60*1000)5秒将客户端剔除的服务在服务注册列表中剔除#
16 response-cache-update-interval-ms: 3000 #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上 #eureka server刷新readCacheMap的时间,注意,client读取的是readCacheMap,这个时间决定了多久会把readWriteCacheMap的缓存更新到readCacheMap上默认30s
17 response-cache-auto-expiration-in-seconds: 180 #eureka server缓存readWriteCacheMap失效时间,这个只有在这个时间过去后缓存才会失效,失效前不会更新,过期后从registry重新读取注册服务信息,registry是一个ConcurrentHashMap。
18 renewal-percent-threshold: 0.49 # 指定每分钟需要收到的续约次数的阈值,默认值就是:0.85
19 client:
20 register-with-eureka: false #false表示不向服务中心注册自己
21 fetch-registry: false #false表示自己就是注册中心,不需要从eureka server获取注册信息
22 instance-info-replication-interval-seconds: 10
23 registry-fetch-interval-seconds: 30 #从eureka服务端获取注册信息的间隔时间
24 service-url:
25 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
运行SpringCloud应用, 成功之后访问地址 http://192.16.10.218:38761/ 可以看到Eureka注册中心的界面 (本例是各种组件注册成功之后的)
Eureka的常用配置
1 eureka:
2 client: #eureka客户端配置
3 register-with-eureka: true #是否将自己注册到eureka服务端上去
4 fetch-registry: true #是否获取eureka服务端上注册的服务列表
5 service-url:
6 defaultZone: http://localhost:8001/eureka/ # 指定注册中心地址
7 enabled: true # 启用eureka客户端
8 registry-fetch-interval-seconds: 30 #定义去eureka服务端获取服务列表的时间间隔
9 instance: #eureka客户端实例配置
10 lease-renewal-interval-in-seconds: 30 #定义服务多久去注册中心续约
11 lease-expiration-duration-in-seconds: 90 #定义服务多久不去续约认为服务失效
12 metadata-map:
13 zone: shanghai #所在区域
14 hostname: localhost #服务主机名称
15 prefer-ip-address: false #是否优先使用ip来作为主机名
16 server: #eureka服务端配置
17 enable-self-preservation: false #关闭eureka服务端的保护机制
本文参考自MacroZheng链接 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。