SpringCloud入门案例(Eureak,Ribbon,Feign)-使用教程
本篇博客项目基于上面博客搭建的项目,后面我会免费上传的。
对于微服务,来说,就是调用各种我们划分的服务,但如果有的服务没有运行起来,有的服务因为网络问题超时了,此时如果我们某个服务调用这些无法调用的服务时,会出现报错,会出现页面无法访问等等,这些我们是不希望看到的,因为这样体验不好,使用如果有一种手段可以当我们调用服务失败的时候,自动让服务返回一个默认的我们自己定义的本地方法来给用户展示,这样会好很多,所以也就是我们需要学习的服务熔断。我们之前的博客介绍了两种SpringColud的远程调用技术,使用使用服务熔断也有两种组合。
Ribbon+Hystrix的使用
- 在consumer-user项目中引入依赖:
<!-- 引入hystrix进行服务熔断 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>~
- 在主运行函数上增加注解@EnableCircuitBreaker,开启短路保护功能。
- 在使用远程访问调用的方法上增加注解@HystrixCommand(fallbackMethod = “buyMovieFallbackMethod”),这里的buyMovieFallbackMethod是我们自定义的一个方法,在控制器中定义即可,这里的方法的参数和返回值类型需要保持一致。
- 这里当我们调用远程服务获取最新电影时,如果出现无法调用,就执行buyMovieFallbackMethod方法:
public Map buyMovieFallbackMethod(Integer id){
Map map=new HashMap();
User user = new User();
user.setId(-1);
user.setUserName("未知用户");
map.put("user",user);
Movie movie = new Movie();
movie.setMovieName("未知电影");
movie.setId(-1);
map.put("movie", movie);
return map;
}
- 当我们运行项目时,就可以实现,当电影的服务停止后,不会出现之前调用不到显示无法访问的页面。
Feign+Hystrix的使用
- 导入依赖,在项目consumer-user-feign中:
<!-- 引入hystrix进行服务熔断 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>~
- 修改application.yml文件配置,增加:
# 开启Feign的熔断功能
feign:
hystrix:
enabled: true
- 在主方法中增加注解:@EnableCircuitBreaker,开启短路保护。
- 修改MovieServiceFeign,Feign已经集成了Hystrix,使用起来非常简单@FeignClient(name=“provider-user”,fallback=“异常处理类”)
- 我们直接在接口MovieServiceFeign同包下新建一个异常处理类,这里是MovieFeignExceptionHandlerService类,这里需要使用@Compont注解
@Component
public class MovieFeignExceptionHandlerService implements MovieServiceFeign {
@Override
public Movie getNewMovie() {
Movie movie = new Movie();
movie.setId(-100);
movie.setMovieName("无此电影呀...");
return movie;
}
}
Hystrix Dashhboard仪表盘
除了隔离依赖服务的调用以外,Hystrix还提供了近实时的监控Hystrix会实时、累加地记录所有关于HystrixCommand的执行信息,包括每秒执行多少请求,多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控
- 我们在使用Feign的远程调用访问的项目中使用仪表盘
- 增加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
- 修改application.yml配置,暴露数据监控流:
management:
endpoints:
web:
exposure:
include: hystrix.stream #访问/actuator/hystrix.stream能看到不断更新的监控流~
- 开启可视化监控功能,在主函数上增加注解:@EnableHystrixDashboard
- 访问http://localhost:7000/hystrix,出现如下界面:
- 将Hystrix的stream地址输入http://localhost:7000/actuator/hystrix.stream点击monitor按钮即可监控