github网址:https://github.com/Netflix/eureka/wiki
定义如下
Eureka是Neflix的一个子模块,也是核心模块之一。Euraka是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来说是非常重要的,有了服务注册和发现。只需要使用服务标识符,就可以访问到服务,而不需要修改服务调用配置文件。功能有点类似于dubbo注册中心,比如Zookeeper
Netflix在设计Euraka时遵守的就是AP原则
Springcloud封装了Netflix公司开发的Eureka模块来实现服务注册和发现,(对比Zookeeper)
Eureka采用的是C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是注册中心。
而系统中的其他微服务使用Erueka的客户端连接到Eureka Server并维持心跳。这样系统的维护人员就可以通过Eureka Server来监控系统中的各个微服务是否正常运行。SpringCloud的一些其他模块(比如:zuul)就可以通过Erueka Server来发现系统中的其他微服务,并执行相关逻辑
Eureka的基本架构
Eureka Server提供服务注册
各个节点启动后,会在EurekaServer中进行注册,这个EurekaServer 中的注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到
Eureka Client是一个Java客户端
用于简化Eureka Server的交互,客户端同时也是具备一个内聚的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将向Eureka Server发送心跳(默认周期30s)。如果Eureka在多个心跳周期内没有接收到某个节点的心跳。Eureka Server将会进入自我保护机制(默认90s)
Eureka Server提供服务的注册和发现
Server Provider 服务提供方将自身的服务注册进入Eureka,从而使服务的消费方能够找到
Server consumer 服务的消费方,从Eureka获取注册服务列表,从而消费服务
maven中央仓库网址:https://search.maven.org/
springcloud整合Eureka,使在我的博客Rest微服务简介和构建的基础上进新整合的。由于其springboot采用的版本比较新,在其基础上按照下面3.1的步骤构建好Eureka Server,启动主启动类,报如下错误:Unable to start web server; nested exception is org.springframework.boot.web。所以对其版本进行了相应的调整。
源码下载网址:https://download.csdn.net/download/erge353729094/12783852
该资源已经整合了Eureka,属于单机版,后面还会在该资源的基础上提供集群版
约定:
Eureka Server指得就是microservercloud-eureka-7001
Provider Server指得就是microservercloud-provider-dept-8001
Consumer Server指的就是microservercloud-consumer-dept-80
3.1.1、创建子工程microservicecloud-eureka-7001
3.1.2、pom文件的配置
3.1.3、yml文件的配置
3.1.3、创建主启动类EurekaServer7001_App
需要在著启动类上添加开启Eureka服务的注解标签:@EnableEurekaServer
3.1.4、测试
http://localhost:7001/
3.2.1、修改Provider Server 的pom文件。将Provider Server 注册到到Eureka
org.springframework.cloud
spring-cloud-starter-eureka
1.2.7.RELEASE
org.springframework.cloud
spring-cloud-starter-config
1.2.3.RELEASE
3.2.2、修改Provider Server 的yml文件。
eureka:
client:
service-url:
defaultZone: http://localhost:7001/eureka #客户端注册进入eureka服务列表。该值与Eureka Server系统中的该属性保持一致
3.2.3、在Provider Server 的主启动类上添加开启Eureka client的注解@EnableEurekaClient
3.2.3、测试
启动Eureka Server,再启动Provider Server
访问: http://localhost:7001/
3.1、主机名称和服务名称的修改
在 Provider Server中 yml文件中添加:eureka.instance.instance-id: 别名
3.2、访问信息有IP信息的提示
在Provider Server 中yml文件中添加:eureka.instance.prefer-ip-address: true #访问路径可以显示IP。
3.3、微服务info内容详细信息
当前问题:超链接点击报ErrorPage
3.3.1、修改Provider Server的pom文件
org.springframework.boot
spring-boot-starter-actuator
3.3.2、在总的父工程中修改pom.xml添加构建builder,其作用就不可以去网上搜索,这里就不详细叙述了。
microservicecloud
src/main/resources
true
org.apache.maven.plugins
maven-resources-plugin
$
3.3.3、在Provider Server中的yml文件中添加info信息
Info.app.name: microservicecloud-provider-dept
Info.company.name: www.dabai.com
Info.build.artifactId: $project.artifactId$
Info.build.version: $project.version$
启动Eureka Server启动类,再启动Provider Server后,访问:http://localhost:7001/
点击主机名连接进入的页面:
好死不如烂活着
某时候某一个微服务不可用,eureka不会立刻清理,依旧会对微服务信息进行保护
在默认情况下,如果EurekaServer在一定的时间内没有接收到某个微服务实例的心跳,EurakaServer将会注销实例(默认90秒),但当网络分区故障发生时,微服务与EurekaServer之间无法正常通信,以上行为可能变得非常危险,因为微服务本身是健康的,此时本不应该注销这个微服务,Euraka通过“自我保护模式”来解决这个问题--当EurekaServer节点在短时间内丢失过多的客户端(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,EurekaServer就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销微服务)。当网络故障恢复后,该EurakaServer会自动退出自我保护模式
在自我保护模式中,EurekaServer会保护注册表中的信息,不会注销任何服务实例,当它收到的心跳数重新恢复到阈值以上时,该EurakaServer节点就会自动退出自我保护模式,它设计哲学就是能可保留错误的服务注册信息,也不盲目的删除任何可能健康的微服务实例,一句话将:就是好死不如烂活着
综上所述:自我保护模式是一种应对网络安全保护措施,它的架构哲学是宁可保留所以的微服务(健康的微服务和不健康的微服务),也不盲目的注销任何健康的微服务,使用自我保护模式,可以让Eureka集群更加健壮、稳定。
在springCloud中,可以使用Eureka.server.enable-self-preservation =false禁用自我保护模式
建议不禁用自我保护模式
表现形式:
对于注册进入Eureka里面的微服务,consumer server系统可以通过服务发现来获得该服务的相关信息,如:端口号,主机名,url等。不是重点。了解即可。
5.1、修改provider Server中com.dabai.springcloud.controller.DeptCotroller添加如下代码
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping(value = "/dept/discovery",method = RequestMethod.GET)
public Object discovery(){
List services = discoveryClient.getServices();
System.out.println("**********"+services);
List instances = discoveryClient.getInstances("MICROSERVICECLOUD-DEPT");
for(ServiceInstance elem:instances){
System.out.println(elem.getServiceId()+"\t"+elem.getHost()+"\t"+elem.getPort()+"\t"+elem.getUri());
}
return this.discoveryClient;
}
5.2、在provider Server的主配置类上添加@EnableDiscoveryClient注解
5.4、启动Eureka Server,再启动provider Server,访问:http://localhost:8001/dept/discovery
5.5、再Consumer Server系统中com.dabai.springcloud.controller.DeptController_Consumer添加如下代码
@RequestMapping(value="/consumer/dept/discovery")
public ResponseEntity discovery(){
String url=REST_URL_PREFIX +"/dept/discovery";
return restTemplate.getForEntity(url,DiscoveryClient.class);
}
5.6、启动Eureka Server,启动provider Server,再启动consumer Serve,访问http://localhost/consumer/dept/discovery
SpringCloud整合Eureka单机版完成
参考:周阳老师教学视频
https://blog.csdn.net/qwe86314/article/details/94552801
总结:站在巨人的肩膀上才能学的更快