springcloud五大组件
1:什么是eureka?
eureka是服务的注册中心 ,它的作用是为我们微服务提供服务的注册与发现,Eureka包含两个组件:Eureka Server和Eureka Client,Eureka Server作为注册中心服务器统一管理我们注册的服务接口,Eureka Client中生产者作为客户端在启动时把服务注册到对应配置的Eureka Server,消费者从Eureka Server拉取服务列表到本地,Eureka Server心跳续约机制会定时更新服务列表,当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。
项目中实现:
一:pom文件配置:
1:引入springcloud
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR6</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2:Eureka Server端配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
2:Eureka client端配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
3:yml配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
4:启动类开启
@EnableEurekaServer #服务端
@EnableDiscoveryClient #客户端
2:什么是ribbon?
ribbon是负载均衡,主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,它主要的作用是通过负载均衡配置提高系统的响应处理能力及维护系统内部的健壮性。
项目中实现:
1.yml配置
provider-server:
ribbon:
ConnectTimeout: 250 # Ribbon的连接超时时间
ReadTimeout: 1000 # Ribbon的数据读取超时时间
OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
MaxAutoRetriesNextServer: 1 # 切换实例的重试次数
MaxAutoRetries: 1 # 对当前实例的重试次数
2:pom无需引入依赖
2:注解
@LoadBalanced
3:什么是hystrix?
hystrix是熔断器,它的主要作用是对大量请求访问有延迟的情况下主动熔断,是微服务当中防雪崩利器,目地是保证系统被大量的请求因为请求阻塞而拖垮宕机,在对要熔断的服务方法中使用@HystrixCommand(fallbackMethod = “failMethod”)来配置熔断后调用的方法。熔断后的服务会被降级,降级后的服务再后来的请求集群中不会被优先访问。
项目中实现:
1:pom引入依赖
<!--引入hystrix-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2:注解
@EnableHystrix
3:熔断方法
@HystrixCommand(fallbackMethod = "failMethod")
public Emp findAll(){
.................
}
public Emp failMethod(){
}
4:什么是feign?
feign远程调用,在微服务项目中,各个微服务之间调用使用feign远程调用,feign提供本地调用的方式,不需要暴露url,提供类似本地调用的实现,实现的方式是使用动态代理。
项目中实现:
1:pom依赖
<!--引入feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.1.5.RELEASE</version>
</dependency>
2:开启注解
@EnableFeignClients
3:定义调用接口
@org.springframework.cloud.openfeign.FeignClient("provider-server")
public interface FeignClient {
//serviceId = 服务名 = spring。。。。。
@RequestMapping("findAll")
public List<Emp> findAll();
@GetMapping("findById")
public Emp findEmpById(@RequestParam("id") Integer id);
}
5:什么是zuul?
zuul 网关, 网关起到一个过滤和路由的作用,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础,Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息, 也就是以后的访问微服务都是通过Zuul跳转后获得。
在项目中实现:
1:pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
2:开启注解
@EnableZuulProxy
3:yml配置
zuul:
prefix: /api
routes:
provider-server: /provider-service/**