Spring Cloud Eureka:服务注册与发现
摘要
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/
![](https://img2020.cnblogs.com/blog/687218/202102/687218-20210212132219624-1762339671.jpg)
运行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链接 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
源码,请联系QQ:1952300797