kyieureka已经闭源了,springcloud也可以采用Zookeeper和Consul做服务中心,我们这里继续使用eureka
在父工程下添加module
添加依赖信息
<!-- eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
application.yml
##服务端口号
server:
port:8000
##服务名称
spring:
application:
name: eurekaserver
eureka:
instance:
##注册ip地址
hostname: 127.0.0.1
client:
serviceUrl:
##client注册地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
## 注册到服务中心 默认为true。本身为注册中心不需要注册到自己。
register-with-eureka:false
## 服务检测 默认true。这里关闭
fetch-registry:false
编写启动类EurekaApplication
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class);
}
}
启动eureka访问http://127.0.0.1:8000/
这样我们的eureka注册中心就搭建完成了
eureka的高可用
服务注册中心的相互注册可以实现eureka的高可用,注册后实现服务清单的互相同步,达到高可用效果。我们用3个节点演示Eureka集群环境搭建:
eureka8000 分别向8001和8002注册服务
eureka8001 分别向8000和8002注册服务
eureka8002 分别向8000和8001注册服务
分别打开http://127.0.0.1:8000/ ,http://127.0.0.1:8001/,http://127.0.0.1:8002/
eureka 的自我保护
默认情况下eureka注册中心会接受eureka client端上报的心跳(默认90s)。当超过时间没有接收到eureka client上报的心跳,eureka server会认为该client端服务不可用,从而将该服务剔除服务列表。当短时间内丢失大量客户端上报的心跳,这个时候eureka server会认为可能是服务端的问题,从而开启自我保护,不会剔除该服务。开发我们可以通过enable-self-preservation=false 关闭自我保护机制保证不可用的服务及时剔除,生产环境慎用。
注意:有时候我们会看见下图的红色消息,这是因为我们将eureka client端重启而注册中心没有一起启动。导致eureka client端上报的心跳大量减少,,eureka注册中心开启自我保护机制,不会剔除没有心跳的client端。Renews (last min) 最后一分钟收到的心跳数量小于Renews threshold(心跳阈值)时就会出现
eureka客户端(服务消费者)
eureka客户端会定时向eureka服务端发送请求获取服务信息(默认30s 可以配置registry-fetch-interval-seconds 时间),并将服务信息缓存到本地