功能 | 主要框架 |
---|---|
服务发现 | Netflix Eureka |
服务调用 | Netflix Feign |
熔断器 | Netflix Hystrix |
服务网关 | Netflix Zuul |
分布式配置 | Spring Cloud Config |
消息总线 | Spring Cloud Bus |
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点
的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就别一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,若Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
创建tensquare_eureka模块,引入依赖 父工程pom.xml定义SpringCloud版本。
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Finchley.M9version>
<type>pomtype>
<scope>importscope>
dependency>
tensquare_eureka模块pom.xml引入eureka-server
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
添加application.yml
server:
port: 6868
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://127.0.0.1:${
server.port}/eureka/**
编写启动类
package com.tensquare.eureka;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class);
}
启动运行启动类,然后在浏览器地址栏输入http://localhost:6868/ 运行效果如下:
其他微服务模块添加netflix-eureka-client依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
修改朋友微服务的application.yml
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:6868/eureka/
instance:
prefer-ip-address: true
所有微服务启动类添加注解**@EnableEurekaClient**,将所有微服务启动,会发现eureka的注册列表中可以看到这些微服务了。
如图所示,进入了保护模式,Eureka Server在运行期间,会统计心跳失败的比例在15分钟之内是否低于85%,如果出现低于的情况(在单机调试的时候很容易满足,实际在生产环境上通常是由于网络不稳定导致),Eureka Server会将当前的实例注册信息保护起来,同时提示这个警告。
在某个微服务模块中添加依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring‐cloud‐starter‐openfeignartifactId>
dependency>
修改微服务模块的启动类,添加注解
@EnableDiscoveryClient
@EnableFeignClients
在对应模块下添加接口,@FeignClient注解用于指定从哪个服务中调用功能 ,注意 里面的名称与被调用的服务名保持一致,并且不能包含下划线。@RequestMapping注解用于对被调用的微服务进行地址映射。 @PathVariable注解一定要指定参数名称。
服务注册组件Eureka
服务发现组件Feign
熔断器 Netflix Hystrix
网关Zuul
分布式配置 SpringCloudConfig
消息总线 SpringCloudBus
1.Eureka本质上是一个工程,ZooKeeper是一个进程。
2.ZooKeeper有Leader和Follower角色,Eureka各个节点平等。
3.ZooKeeper采用过半数存活原则,Eureka采用自我保护机制解决分区问题。
4.Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper一样使得整个注册系统瘫痪。
相同点:目标一致都是从可用性和可靠性出发,为了解决某个微服务的调用响应时间过长或者不可用进而占用越来越多的系统资源引起雪崩效应;用户体验类似最终都让用户体验到的是某些功能暂时不可用;
不同点:触发原因不同服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑。