美文网首页
Spring-Cloud基础组件总结

Spring-Cloud基础组件总结

作者: 艾特艾特艾特 | 来源:发表于2019-08-19 22:22 被阅读0次

注册中心

  • 1:Eureka 服务的注册中心
  • 2:Consul 服务注册中心自带了eureka

通过 @EnableEurekaServer 注解在一个普通的SpringBoot应用中开启一个服务注册中心,在默认情况下,其会默认将自己认为是客户端向服务端注册自己,其本身就是一个服务端注册中心,要修改其默认注册行为

@EnableDiscoveryClient

在SpringBoot的应用主类上加上此注解,来激活Eureka中DiscoveryClient的实现,通过在controller里注入此类来获取到服务端信息的输出加入到当前服务体系中,每一个客户端都需要加上这个注解来让服务端找到自己并加入到服务端

@EnableEurekaClient

SpringBoot的应用主类中加上此注解表明自己是Eureka的Client

  • 结论

两个注解都是为了向注册中心表明自己是服务注册中心的Client
共同点,他们都需要在application.yml配置文件中,配置注册中心的地址
不同点,@EnableDiscoveryClient注解,服务注册中心可以是Eureka也可以是Consul也可以是zookeeper 但是@EnableEurekaClient注解其服务注册中心最好是Eureka

服务消费

  • 1:LoadBalancerClient (随机选取)

客户端负载均衡 choose 函数从服务注册中心随机选取一个client实列,可以从这个实列里来获取host加端口去访问消费client

  • 2:Spring Cloud Ribbon (列表轮询)

客户端负载均衡 是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。
使用ribbon时url参数没有拼接直接调用服务,因springCloud Ribbon有一个拦截器能够实现在实际调用的时候去选择实列的服务,并将实际要请求的IP地址和端口替换这里的服务名,从而完成服务接口的调用。

添加一个负载均衡的支持

@LoadBalanced,@Bean一个RestTemplate 就拥有了负载均衡的效果,拿到 RestTemplate对象直接请求,url地址,spring Ribbon拦截器会拦截住请求,将url替换成对应的IP和端口去列表轮训访问client 如果不添加@LoadBalanced 会报无法映射,因映射ip:port是LoadBlanceClient实现,

  • Fegin (目前来看负载均衡方式列表循环)

基于ribbon实现的 声明式服务调用客户端 快速而又简洁,通过接口来声明定义调用的服务,实现了可插拔式调用,同时扩展了 springMvc注解的支持整合了ribbon和eureka提供负载均衡的HTTP客户端实现
通过@EnableFeignClients开启fegin客户端加上@EnableDiscoveryClient上让eureka发现服务,接口通过@FeignClient("eureka-client")eureka上注册的服务实列 通过@GetMapping("/dc") 调取对应服务实列接口(本次注册eureka上服务实列为三个)

Spring Cloud Config(实现了应用多环境的外部化配置以及版本管理)

用来为分布式系统中的基础设施和微服务应用提供集中化的外部配置支持,分两个方向 服务端,客户端。

  • 服务端

通过@EnableConfigServer注解开启一个服务环境配置中心,默认实现了与git仓库存储配置信息,通过在git仓库修改配置文件内容或信息,让客户端加载到配置仓库里的配置信息,(接口,加密算法,解密,等都可以配置在配置仓库)

  • 客户端

通过连接服务端,获取服务端里仓库配置中心里环境文件配置信息(接口,加密算法等等)

Spring Cloud Hystrix

在Spring Cloud Hystrix中实现了线程隔离、断路器等一系列的服务保护功能。它也是基于Netflix的开源框架 Hystrix实现的,该框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等强大功能。

服务降级

  • @HystrixCommand 服务降级处理。

服务消费方触发服务请求超时异常服务消费通过@HystrixCommand("兄弟这可不是字符串而是你指定要执行的方法") 中指定的降级逻辑去处理了

Spring Cloud Zuul

  • 网关服务 配置了统一入口Api

zuzu和eureka结合时,它默认会去eureka里去寻找client ,通过路径上输出的client的serivceId去寻找eureka里的client

  • 如下

http://localhost:1112/eureka-client/dc 这个地址中eureka-client 进到zuzu,zuzu会去eureka里去寻找client的serviceId为eureka-client的client找到了默认以列表轮训的方式去访问client。
这里它默认负载均衡的方式为ribbon(列表轮训访问) 也可以通过配置路由规则

zuul:routes:服务名:要映射路径:映射client的url:
     方式:            Y                           M       L文件配置
zuul:
  routes:
#  single-instance
    api-a:
      path: /api-a/**
      url: http://localhost:2004/
 api-b:
      path: /api-b/**
      serviceId: api-b
api-b:    //注意这里需要设置ribbon默认不去加载否则加载注册中心的client       
  ribbon:
    listOfServers: http://localhost:2003/, http://localhost:2002/
ribbon:
  eureka:
    enabled:  false//禁止默认前往eureka里寻找client清单

Spring Cloud Zuul过滤器(配置过滤请求规则)

相关文章

网友评论

      本文标题:Spring-Cloud基础组件总结

      本文链接:https://www.haomeiwen.com/subject/spdysctx.html