2020-springCloud总结
1.Eureka的高可用
就是通过多个eureka实例进行互相注册,然后修改每个实例的serviceUrl即可。Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。
2.Feign使用
我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用Spring Cloud Ribbon时自行封装服务调用客户端的开发量。Spring Cloud Feign具备可插拔的注解支持,包括Feign注解和JAX-RS注解。同时,为了适应Spring的广大用户,它在Netflix Feign的基础上扩展了对Spring MVC的注解支持。
pom.xml中引入spring-cloud-starter-eureka和spring-cloud-starter-feign依赖:
3.Ribbon负载均衡器策略
Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,其子类有:
4.SpringCloudStream
是一个构建消息驱动微服务的框架,应用程序通过 inputs 或者 outputs 来与 Spring Cloud Stream 中binder 交互,通过我们配置来 binding ,而 Spring Cloud Stream 的 binder 负责与消息中间件交互。所以,我们只需要搞清楚如何与 Spring Cloud Stream 交互就可以方便使用消息驱动的方式。
通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,引用了发布-订阅、消费组、分区的三个核心概念。目前仅支持RabbitMQ、Kafka。
5.Zuul路由及高可用
Zuul的核心还是一系列的过滤器,在路由的前置过滤器和后置过滤器上,Zuul可以大有文章可做,比如前置过滤器的典型应用场景,我们可以利用他来限流,流量过大的时候,依据某些规则,把请求挡回去,后续逻辑就不再处理了,再比如鉴权,原始有三个服务,每个服务都要鉴权一次,那可真心够累的,把鉴权的逻辑放到前置过滤器里,是个不错的选择,还有一些比如参数校验,请求转发,都是适合放到前置过滤器
里面的。
6.Zuul:pre和post过滤器
路由映射:主要通过pre类型的过滤器完成,它将请求路径与配置的路由规则进行匹配,以找到需要转发的目标地址;
而请求转发的部分则是由route类型的过滤器来完成,对pre类型过滤器获得的路由地址进行转发。所以说,过滤器可以说是zuul实现api网关功能最核心的部件,每一个进入zuul的http请求都会经过一系列的过滤器处理链得到请求响应并返回给客户端。
请求生命周期:
外部http请求到达api网关服务的时候,
首先它会进入第一个阶段pre,在这里它会被pre类型的过滤器进行处理。该类型过滤器的主要目的是在进行请求路由之前做一些前置加工,比如请求的校验等。在完成了pre类型的过滤器处理之后,
请求进入第二个阶段routing,也就是之前说的路由请求转发阶段,请求将会被routing类型的处理器处理。这里的具体处理内容就是将外部请求转发到具体服务实例上去的过程,当服务实例请求结果都返回之后,routing阶段完成,
请求进入第三个阶段post。此时请求将会被post类型的过滤器处理,这些过滤器在处理的时候不仅可以获取到请求信息,还能获取到服务实例的返回信息,所以在post类型的过滤器中,我们可以对处理结果进行一些加工或转换等内容。
另外,还有一个特殊的阶段error,该阶段只有在上述三个阶段中发生异常的时候才会触发,但是它的最后流向还是post类型的过滤器,因为它需要通过post过滤器将最终结果返回给请求客户端(对于error过滤器的处理,在spring cloud zuul的过滤链中实际上有一些不同)
7.Zuul鉴权
鉴权:首先创建类:
8.服务容错和Hystrix,触发降级:
服务降级:
实现思路:
1.通过HystrixCommand注解指定
2.fallbackMethod中具体实现降级逻辑