创建公共接口
首先我们来创建一个普通的maven工程,叫做hello-service-api,由于我们要在这一个项目中使用SpringMVC的注解,因此创建成功之后,需要添加spring-boot-starter-web依赖,如下:
1 | <dependency> |
首先我们来创建一个普通的maven工程,叫做hello-service-api,由于我们要在这一个项目中使用SpringMVC的注解,因此创建成功之后,需要添加spring-boot-starter-web依赖,如下:
1 | <dependency> |
我需在在服务提供者中提供两个接口供服务消费者调用,如下:
1 | @RequestMapping("/getbook6") |
Spring Cloud Hystrix 仪表盘与 Turbine 集群监控
不管是监控单体应用还是Turbine集群监控,我们都需要一个Hystrix Dashboard,当然我们可以在要监控的单体应用上继续添加功能,让它也具备仪表盘的功能,但是这样并不符合我们微服务的思想,所以,Hystrix仪表盘我还是单独创建一个新的工程专门用来做Hystrix Dashboard。OK,在Spring Cloud中创建一个Hystrix Dashboard非常简单,如下:
如果我们使用了自定义Hystrix请求命令的方式来使用Hystrix,那么我们只需要重写getCacheKey方法即可实现请求缓存,如下:
1 | public class BookCommand extends HystrixCommand<Book> { |
Spring Cloud Hystrix 的服务降级与异常处理
前面两篇文章中,fallbackMethod所描述的函数实际上就是一个备胎,用来实现服务的降级处理,在注解中我们可以通过fallbackMethod属性来指定降级处理的方法名称,在自定义Hystrix请求命令时我们可以通过重写getFallback函数来处理服务降级之后的逻辑。使用注解来定义服务降级逻辑时,服务降级函数和@HystrixCommand注解要处于同一个类中,同时,服务降级函数在执行过程中也有可能发生异常,所以也可以给服务降级函数添加‘备胎’,如下:
1 | @HystrixCommand(fallbackMethod = "error1") |
我们除了使用@HystrixCommand注解,也可以自定义类继承自HystrixCommand,如下:
1 | public class BookCommand extends HystrixCommand<Book> { |
这是所有负载均衡策略的父接口,里边的核心方法就是choose方法,用来选择一个服务实例。
AbstractLoadBalancerRule是一个抽象类,里边主要定义了一个ILoadBalancer,就是负载均衡器。这里定义它的目的主要是辅助负责均衡策略选取合适的服务端实例。
首先我们需要在服务消费者中引入hystrix,如下:
1 | <dependency> |
首先我们来看一张上篇文章中的旧图:
这是ILoadBalancer接口的一张类关系图,我们就从这张图里看起吧。
AbstractLoadBalancer类的定义如下:
Spring Cloud RestTemplate 负载均衡
开启负载均衡很简单,只需要在RestTemplate的bean上再添加一个@LoadBalanced注解即可,所以本文我们就从这个注解开始我们的分析吧。
首先我们来看看@LoadBalanced注解的源码:
1 | /** |