SpringCloud:Eureka注册中心,服务的注册与发现
Eureka发音:衣瑞卡
Eureka是什么
是Netfix的重要组件之一,是一个基于Rest的服务(http协议),用于定位服务,实现云端中间层服务的发现和故障转移,通俗的说就是负责服务的注册与发现的中间件,功能与zookeeper相似。
拓展:目前比较火的redis也可以做注册中心
Eureka工作原理
1.采用了c-s的架构设计,EuerkaServer作为服务的注册功能的服务器,它是注册中心
2.系统中的各微服务通过Euerka客户端连接EurekaServer并保持心跳连接(心跳链接相当于dubbo-admin),心跳机制属于EureServer,维护人员可以通过EurekaServer来监控各微服务是否运行正常
Spring Cloud Netfix 的其他模块,如zuul就可以通过EurekaServer发现系统中的其他模块,并执行操作,
心跳连接:通俗的说就像人一样,有心跳证明这个微服务还活着,没心跳就证明这个微服务有故障;类似定时任务,间隔多久检测一次心跳,
客户端向EurekaServer发送心跳周期(默认为30秒),如果在多个周期内没有收到心跳就从注册表中移除(默认周期90秒)
3.EurekaServer需要开发人员自己写,不想zookeeper(直接下载,拿来即用)
自我保护机制
通俗的说就是在某时刻某个微服务不可用了(未知原因),Eureka不会立刻清理,依旧会对该服务进行保存
详解;
通常情况下,如果Eureka在一定时间内没有收到某个服务实例的心跳,EurekaSever会注销该服务,但是当因为网络分区故障发生,如停电等造成服务实例没有了心跳,服务是没有问题的,此时如果EurekaServer直接按心跳机制去注销这些服务的话是不可取的,所以EurekaSever的自我保护机制就会起作用,他是通过判断:当EurekaServer节点在短时间内丢失大量的客户端时,Eureka就会去保护注册表中的信息,当网络故障恢复时,该EurekaServer节点就会自动退出自我保护机制
它的设计哲学是:宁可保留错误的服务注册信息,也不盲目的删除任何可能健康的服务实例
自我保护机制可以使用eureka.server.enable-self-preseration=false,禁用,不建议禁用
EurekaSever环境配置及注册测试
1.新建一个maven模块,当作EurekaSever
导入相关依赖
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!--EurekaServer--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka-server --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> <version>1.4.6.RELEASE</version> </dependency>
yaml配置EurekaSever
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
server:
port: 7001
#Eureka配置
eureka:
instance:
hostname: localhost #Eureka服务端的实力名称
client:
register-with-eureka: false #表示是否向服务端注册自己,本身就是服务端
fetch-registry: false #fetch-registry: false表示自己为服务端,注册中心
service-url: #监控页面地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/erueka/
新建springboot主启动类,开启EurekaSever功能
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
////url:http://http://localhost:7001/ @EnableEurekaServer //开启Eurka服务端功能,可以接收别人注册进来 @SpringBootApplication public class EurekaServer_7001 { public static void main(String[] args) { SpringApplication.run(EurekaServer_7001.class,args); } }
2。Eureka客户端
相关依赖
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!--Eureka--> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!--完善eureka监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
yaml配置Eureka客户端
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#Eureka的配置
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka/
instance:
instance-id: springcloud-provider-dept8001 #修改eureka的默认描述信息
#info配置,作用:说明信息
info:
app.name: king-springboot
company.name: blog.king.com
主启动类开启相关功能:
@EnableDiscoveryClient //服务发现,企业级协同开发
@EnableEurekaClient //开启eureka客户端,在服务启动后自动注册到指定的EurekaServer中
最后打开相应的EureSever 的port
微服务中间件开发步骤
导入依赖
编写配置文件
开启指定功能(@Enablexxx)
配置类(@Configuration @Bean)部分需要