注册中心(eureka)
单实例eureka搭建、高可用eureka搭建、注册中心原理
一、eureka注册中心服务端
1、项目结构(idea & mac 环境)
配置maven 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
application.properties
#应用名称
spring.application.name=SingleEureka
#激活的配置文件
spring.profiles.active=9001
Java 启动类
开启eureka服务器配置,添加 @EnableEurekaServer 注解
@SpringBootApplication
@EnableEurekaServer
public class SingleEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(SingleEurekaApplication.class, args);
}
}
/etc/hosts
追加如下3行(高可用场景使用到)
127.0.0.1 eureka2.com
127.0.0.1 eureka3.com
127.0.0.1 eureka4.com
2、单机注册中心
application-9001.properties
#服务器端口
server.port=9001
#不从其它eureka拉取注册信息
eureka.client.fetch-registry=false
#不向其它eureka注册自己
eureka.client.register-with-eureka=false
#注册地址
eureka.client.service-url.default-zone=http://localhost:9001/eureka
验证
修改application.properties
spring.profiles.active=9001
项目启动后访问 http://localhost:9001/
单机注册中心就搭建完了!!!
3、高可用注册中心
eureka2配置
application-9002.properties
server.port=9002
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#注册和拉取信息地址
eureka.client.service-url.defaultZone=http://eureka3.com:9003/eureka,http://eureka4.com:9004/eureka
#主机名
eureka.instance.hostname=eureka2.com
验证
修改application.properties
spring.profiles.active=9002
启动项目
启动时有如下错误提示,由于eureka3 、eureka4还没有启动,eureka2启动时链接eureka3、eureka4报错,正常现象(忽略即可)
项目启动后访问 http://eureka2:9002/
eureka3、eureka4还没启动,不可用
eureka3配置
application-9003.properties
server.port=9003
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#注册和拉取信息地址
eureka.client.service-url.defaultZone=http://eureka2.com:9002/eureka,http://eureka4.com:9004/eureka
#主机名
eureka.instance.hostname=eureka3.com
验证
修改application.properties
spring.profiles.active=9003
启动项目后,访问http://eureka3.com:9003/
忽略链接eureka4报错。。。
eureka4配置
application-9004.properties
server.port=9003
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#注册和拉取信息地址
eureka.client.service-url.defaultZone=http://eureka2.com:9002/eureka,http://eureka3.com:9003/eureka
#主机名
eureka.instance.hostname=eureka4.com
验证
修改application.properties
spring.profiles.active=9004
启动项目后,访问http://eureka4.com:9004/
eureka2、eureka3、eureka4组成的高可用注册中心就搭建完了!!!
二、客户端
服务提供者配置
项目结构
maven依赖
pom添加下面依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Spring配置
application.properties
#服务端口
server.port=9010
#服务名称
spring.application.name=hello-provider
#使用单个实例注册中心
#eureka.client.service-url.defaultZone=http://localhost:9001/eureka
#使用高可用注册中心,也可将多个注册中心实例用逗号分割拼接
eureka.client.service-url.defaultZone=http://eureka2.com:9002/eureka
启动类
添加 @EnableEurekaClient 注解
@SpringBootApplication
@EnableEurekaClient
public class HelloProviderApplication {
public static void main(String[] args) {
SpringApplication.run(HelloProviderApplication.class, args);
}
}
controller提供rest接口
@RestController
public class HelloController {
@GetMapping("hello")
public String hello(String name){
return String.format("Hello %s!",name==null?"World":name);
}
}
验证
step1、启动服务
step2、浏览器请求http://localhost:9010/hello?name=xiaoming
step3、查看注册中心 http://eureka4.com:9004/
三、原理
注册中心业务流程时序图
注册中心提供的功能
- 服务注册
- 服务续约
- 服务下线
- 不可用服务检测下线
- 服务列表查询
- 。。。
eureka 相关参数配置
服务器端配置
#关闭自我保护模式
eureka.server.enable-self-preservation=false
#失效服务间隔
eureka.server.eviction-interval-timer-in-ms=3000
客户端配置
#续约发送间隔默认30秒,心跳间隔
eureka.instance.lease-renewal-interval-in-seconds=5
#表示eureka client间隔多久去拉取服务注册信息,默认为30秒,对于api-gateway,如果要迅速获取服务注册状态,可以缩小该值,比如5秒
eureka.client.registry-fetch-interval-seconds=5
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=60