搭建服务注册中心
可以通过Spring Initializr来创建一个Spring boot的工程,命名为eureka-server,然后引入依赖1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
然后在启动类中加入@EnableEurekaServer
注解就ok了.
在默认的设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为.在application.yml中做如下配置:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15spring:
application:
name: eureka-server
server:
port: 1111
eureka:
instance:
hostname: localhost
client:
# eureka.client.register-with-eureka 由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己.
register-with-eureka: false
# 注册中心的职责就是维护服务实例,并不需要去检索服务,所以也设置为false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
完成了上面的配置后,启动应用,访问http://localhost:1111/.就可以看到Eureka信息面板.如下:
如图,Instances currently registered with Eureka栏是空的,说明该注册中心还没有注册任何服务
注册服务提供者
注册中心搭建好之后,来创建一个client端,向注册中心发布自己
还是先创建一个项目,命名为eureka-client,修改pom引入依赖1
2
3
4<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
启动类添加注解@EnableEurekaClient
,然后修改配置文件application.yml,如下:1
2
3
4
5
6
7
8
9spring:
application:
name: eureka-client
server:
port: 2001
eureka:
client:
service-url:
defaultZone: http://localhost:1111/eureka/
这里再创建一个controller,用来测试,以及后面使用
1 | @RestController |
然后,启动项目,再次到eureka面板中看下,这个client已经注册进来了
自我保护模式
完成之后,面板中可能会出现一行红字,内容是:1
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
这个是在server中出现的一个报警,为什么会出现这个报警呢?
因为Eureka Server端和client端采用的是心跳机制,server会不停的去检查client是否上线,在一定时间server会统计client的存活率,当存活率低于一定值的时候就会出现这个报警.
意思就是这个client上线率太低了,可能我现在都不知道你是上线还是下线,但是虽然我不知道但是我会当做是你上线,其实是一种自我保护.
自我保护机制的工作机制是如果在15分钟内超过85%的客户端节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障,Eureka Server自动进入自我保护机制,此时会出现以下几种情况:
- Eureka Server不再从注册列表中移除因为长时间没收到心跳而应该过期的服务
- Eureka Server仍然能够接受新服务的注册和查询请求,但是不会被同步到其它节点上,保证当前节点依然可用
- 当网络稳定时,当前Eureka Server新的注册信息会被同步到其它节点中
如何关闭?
在开发环境可以将这个设置关闭,避免当你在调用微服务的时候显示上线 但是实际是下线
在server端的配置文件中,加入以下配置:1
2
3eureka:
server:
enable-self-preservation: false
在生产环境中建议打开此配置