当前位置:首页 > 技术交流 > 学习笔记 > 正文内容

springCloud笔记

薇薇3年前 (2020-11-25)学习笔记1115

Spring Cloud OpenFeign解释

1. 两个重要的标注

@FeignClient :标注用于声明Feign客户端可访问的web服务

   参数:

1.nam

2.qualifier

3.url,

4.decode404,

5.configuration,

6.fallback(默认void.class),

7.fallbackFactory(默认void.class),

8.path

@EnableFeignClients :标识用于修饰spring boot应用的入口类,通知spring boot应用启动时扫描应用中声明的Feign客户端可访问的Web服务。

  参数:

feignContract: SpringMvcContract

feignDecoder: ResponseEntityDecoder

feignEncoder: SpringEncoder

feignLogger: Slf4jLogger

feignBuilder: Feign.Builder

feignClient: LoadBalancerFeignClient(开启Ribbon时)或默认的HttpURLConnection

 

 

 

Springcloud的服务发现框架  --Eureka

 它是基于REST(代表性状态转移)的服务,主要在AWS云中用于定位服务,已实现负载均衡和中间层服务器的故障转移。我们称次为Eureka服务器,他还有一个基于java的客户端组件Eureka Client,使与服务的交互变得更加容易。客户端还有一个内置的负载平衡器,可以执行基本的循环负载平衡。

服务发现:相当于房东中介和租客 租房。。等一系列的流程

服务提供者;提供一些自己能够给执行的一些服务给外界,相当于房东

服务消费者:就是需要使用一些服务的用户,相当于租客

服务中介:服务提供者可以吧自己注册到服务中介那里,而服务消费者如需要消费一些服务,就可以去服务中介中寻找注册在服务中介的服务提供者

服务注册 Register

   Eureka客户端向Eureka Server注册时,它提供自身的元数据比如ip,端口,运行状况指示符url,主页等。(房东去中介那里提供房屋信息)

服务续约 Renew

   Eureka客户会每隔30(默认)发送一次心跳来续约。通过续约来告知EurekaServerEureka客户仍然存在,没有问题,正常情况下,如果EurekaServer90秒没有收到Eureka客户的续约,它会将实例从其注册表中删除。(房东定期告诉中介,我的房子还租,中介收到后继续保留房屋信息)

获取注册列表信息 Fetch Registries

Eureka客户端从服务器获取注册表信息,并将其缓存在本地。客户端每次会使用该信息查找其他服务,从而远程调用。该注册表每30秒更新一次(默认)。每次返回可能都跟本地缓存不一样,Eureka客户端自动处理。如果因某原因导致注册列表信息不能及时匹配,Eureka客户端则会重新获取整个注册表信息。默认情况下Eureka客户端使用压缩JSON格式来获取注册列表的信息。(租客去中介那里获取所有房源,租客为了获取最新的信息,会定期向中介那里获取并更新本地列表)

服务下线 Cancel

Eureka客户端在程序关闭时向Eureka服务器发送取消请求。发送之后,该客户端实例信息将从服务器的实例注册表中删除。该下线请求不会自动完成,需要调用

DiscoveryManager.getInstance().shutdownComponent();

(房东告诉中介我的房子不租了,中介就将注册的房屋从房屋信息下架)

 

负载均衡之Ribbon

什么是RestTemplate?

RestTemplatespring提供的一个访问Http服务的客户端类(微服务之间的调用使用的是RestTemplate)Eureka框架中的注册、续约等,底层使用的都是RestTemplate

为什么需要Ribbon?

  Netflix公司的一个开源均衡负载的项目,是一个客户端/进程内负载均衡器,运行在消费端。

  其工作原理就是客户端获取到所有服务器列表后,在其内部使用负载均衡算法,进行对多个系统的调用。

 

NginxRibbon的对比

  Nginx是一种集中式的负载均衡器,接收所有请求进行负载均衡

  Ribbon是消费者端进行的负载均衡。

 

Ribbon负载均衡算法

Nginx使用的是轮询加权轮询算法,ribbon默认使用的是轮询策略

RoundRobinRule:轮询策略

RandomRule:随机策略

RetryRule:重试策略

 

 

 

 

RibbonFeign的区别?

Ribbon使用RestTemplate调用远程服务对应的方法

Feign提供方提供对外接口,调用方使用 在接口上使用@FeignClinet(指定服务名)

区别:

 相同:都是调用其他服务的,不过方式不同

 不同:

1. 启动类使用注解不同,Ribbon使用的是@RibbonClientFeign使用的是@enableFeignClients

2. 服务的指定位置不同,Ribbon是在@RibbonClient主街上声明,Feign则是定义抽象方法接口上的

3. 调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤繁琐,Feign则是在Ribbon的基础上改进,采用接口的方式,将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建http请求,不过要注意的是抽象方法的注解、方法签名要和提供服务的方法完全一致。

 

 

 

 

 

 

 

 


版权声明:本文由纵横四海博客发布,如需转载请注明出处。

部分资源整理自互联网,如侵权请联系站长删除!

本文链接:https://www.fxkgg.com/post/13.html

分享给朋友:

相关文章

Layui数据表格导出身份证时后三位变为E+/000的解决办法(templet一句话搞定)

Layui数据表格导出身份证时后三位变为E+/000的解决办法(templet一句话搞定)

在使用layui自带的数据表格导出功能时,身份证后三位显示为000,导致数据表无法使用的情况,如下图:其实要解决的话,非常简单,万不可参照网上那种千篇一律的文章,即所谓的插件包,比如这样:https:...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。