Spring Cloud Eureka:服务注册与发现

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链接 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

posted @ 2021-02-12 13:25  reno2020  阅读(90)  评论(0编辑  收藏  举报