概述
服务故障雪崩效应
在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以通过 RPC 相互调用,在 Spring Cloud 中可以用 RestTemplate + LoadBalanceClient 和 Feign 来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证 100% 可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet 容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的雪崩效应。
概念
服务熔断:
一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。很多时候刚开始可能只是系统出现了局部的、小规模的故障,然而由于种种原因,故障影响的范围越来越大,最终导致了全局性的后果。
适用场景:防止应用程序直接调用那些很可能会调用失败的远程服务或共享资源
服务降级:
当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。
Feign 中使用 Sentinel
如果要在项目中引入 Sentinel,使用 group ID 为 org.springframework.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-sentinel 的 starter。
org.springframework.cloud
spring-cloud-starter-alibaba-sentinel
Sentinel 适配了 Feign 组件。但默认是关闭的。需要在配置文件中配置打开它,在配置文件增加以下代码:
feign:
sentinel:
enabled: true
在 Service 中增加 fallback 指定类
package com.dsy.spring.cloud.alibaba.nacos.consumer.feign.service;
import com.dsy.spring.cloud.alibaba.nacos.consumer.feign.service.fallback.EchoServiceFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
/**
* @author sanya deng
* @version 1.0.0
* @Title: EchoService
* @ProjectName SpringCloud
* @Description: TODO
* @email forestsancy@163.com
* @date 2019-04-12 16:31
*/
//通过 @FeignClient("服务名") 注解来指定调用哪个服务
@FeignClient(value = "nacos-provider", fallback = EchoServiceFallback.class)
public interface EchoService {
@GetMapping(value = "/echo/{message}")
String echo(@PathVariable("message") String message);
}
创建熔断器类并实现对应的 Feign 接口
package com.dsy.spring.cloud.alibaba.nacos.consumer.feign.service.fallback;
import com.dsy.spring.cloud.alibaba.nacos.consumer.feign.service.EchoService;
import org.springframework.stereotype.Component;
/**
* @author sanya deng
* @version 1.0.0
* @Title: EchoServiceFallback
* @ProjectName SpringCloud
* @Description: TODO
* @email forestsancy@163.com
* @date 2019-04-15 10:43
*/
@Component
public class EchoServiceFallback implements EchoService {
@Override
public String echo(String message) {
return "echo fallback";
}
}
测试熔断器
图片.png
图片.png
最后
以上就是调皮御姐为你收集整理的feign整合sential,Feign中使用Sentinel熔断器防止服务雪崩的全部内容,希望文章能够帮你解决feign整合sential,Feign中使用Sentinel熔断器防止服务雪崩所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复