什么是服务降级:
核心思想是区分业务,优先核心服务,相当于弃车保帅,,例如下单的时候,优先确保订单和支付服务,积分服务低优先级
使用方法也很SpringBoot : 注意这是服务端的,非客户端(相对而言)
1.引入依赖
2.启动类上配置注解
3.编写具体逻辑 ->通过核心注解@HystrixComm
<!-- 服务降级措施 的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
2.在启动类上添加注解:
@EnableCircuitBreaker
3.编写具体的处理方法:
@HystrixCommand(fallbackMethod="fallback") 这个注解指定但访问这个页面报错或者时间太久之后就会出发降级,从而调用了下面的fallback函数
@RequestMapping("/index")
public ModelAndView index(HttpServletRequest request,HttpServletResponse response)
{
ModelAndView modelAndView=null;
Collection<CategoryDTO> categories = indexSerivceFacaded.showCategories();
System.out.println(categories);
return modelAndView;
}
public ModelAndView fallback(HttpServletRequest request,HttpServletResponse response)
{
System.out.println("allaaa");
return null;
}
这样当访问这个页面出错的时候,就会触发服务降级,天猫上的如网页丢失一会会这些都是服务降级
----------------------------------------------------------------------------------------------------------------------------------对于使用了@FeiginClient的也有对应的服务降级写法:
1.因为使用了@FeignClient 所以不需要添加依赖(内部包含了这个依赖)
2.在客户端的配置文件中编写:feign.hsystrix.enabled=true (这个是没提示的,要写正确)
3.编写逻辑:
具体如下:
2:
feign:
hystrix:
enabled: true
3:
@FeignClient(name="product",fallback=IProductServerService.IProductServerServiceFallBack.class)
public interface IProductServerService
{
@GetMapping("/category/all")
ResultVO<Collection<CategoryDTO>>findAllCategories();
@Component
public static class IProductServerServiceFallBack implements IProductServerService
{
@Override
public ResultVO<Collection<CategoryDTO>> findAllCategories()
{
System.out.println("调用fallback函数");
return ResultUtils.fail();
}
}
}
这样当访问这个服务的时候,而这个服务宕机了,则会访问上述代码中的FallBack这个类触发服务降级