ribbon介绍:
spring cloud采用ribbon来做客户端负载均衡(主要是服务清单维护在客户端),eureka分为eureka服务端和客户端。
eureka服务端,是注册中心,支持高可用配置,推荐每个可用的区域运行一个eureka注册中心,形成一个集群,采用异步模式互相复制各自的状态。
eureka客户端,主要处理服务的注册与发现,采用注解和参数配置的方式嵌入在客户端应用程序。在应用程序启动的时候,向注册中心注册服务并周期性发送心跳更新它的服务租约,同时还能从从注册中心查询服务列表信息缓存到本地周期更新服务状态。
1,eureka服务端主要配置
1.1,pom加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
1.2,开启服务注册功能的注解
@EnableEurekaServer //Eureka服务端
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
2,eureka客户端主要配置
1.1,pom加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
1.2,在启动类加注解开启eureka客户端
//Eureka client是客户端API,用来注册服务到Eureka server。
@SpringBootApplication
@EnableDiscoveryClient //Eureka客户端
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
ribbon简介及配置:
ribbon主要用来做客户端负载均衡,当a服务请求b服务时,a服务从注册中心获取到b服务的服务清单,假如b服务有多个实例,到底请求哪一个,这种选择策略通过ribbon实现。ribbon是通过restTemplate的接口调用。
具体配置:三步走
1,pom加ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
2,创建RestTemplate实例并且通过@LoadBalanced开启负责均衡
@Bean
@LoadBalanced //实现负载均衡
RestTemplate restTemplate(){
return new RestTemplate();
}
feign的配置参考下面的链接:
https://www.cnblogs.com/huangjuncong/p/9053576.html
Hystrix简介及配置
在微服务架构中,当某个服务单元出现故障时,往往由于依赖会导致很多的服务请求被阻塞,导致整个系统的瘫痪。因为出现故障的这个服务迟迟不响应请求。
断路器就是在某个服务出现故障时通过断路器的故障监控,向服务调用方返回一个错误而不是长时间的等待。这样就不会使调用线程因调用故障服务被长时间占用不释放。它具备服务降级,服务熔断,线程和信号隔离,请求缓存,请求合并以及服务监控等强大功能。具体配置
1,pom引入断路器依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
2,在启动类或者controller层开启断路器功能
@RestController
//启用熔断器
@EnableCircuitBreaker
public class ReadingController {
//服务降级使用HystrixCommand
@HystrixCommand(fallbackMethod = "readfallback")
@RequestMapping(value = "/read")
public String readBook(){
String bookStr = restTemplate.getForObject("http://localhost:8088/book", String.class);
return bookStr;
}
public String readfallback() {
return "fallback";
}
在此说下服务降级跟熔断的区别,
服务降级:当调用服务接口出现故障时自动切到备用回调接口叫服务降级,服务降级就是服务的降级处理逻辑。
服务熔断:
一定时间内达到一定的次数无法调用,并且多次检测没有恢复的迹象,那么就服务熔断,下次请求就不会请求到该服务,直接请求服务降级处理策略