精华内容
下载资源
问答
  • 转载于:https://www.cnblogs.com/BeanBai/p/11102661.html

     

    转载于:https://www.cnblogs.com/BeanBai/p/11102661.html

    展开全文
  • 首先feign也是通过调用了ribbon的负载均衡器实现了server地址的映射和负载均衡 通过增加EnableFeignClients 开启feign 然后引入了FeignClientRegister->registerDefaultConfiguration 扫描注解FeignClient ...

    首先feign也是通过调用了ribbon的负载均衡器实现了server地址的映射和负载均衡

    通过增加EnableFeignClients 开启feign

    然后引入了FeignClientRegister->registerDefaultConfiguration 扫描注解FeignClient

    ->registerFeignClients->FeignClientFactoryBean会将FeignClient注解的类信息交给工厂类生成代理bean注册到spring容器中

    总结就是项目启动时,因为配置了EnableFeignClient注解 会自动扫描FeignClient注解类,然后对他们生成代理对象放入sprng容器中。

    feign的请求就是http连接,这方面没有做过多的优化,只是因为继承了ribbon支持了负载均衡

    展开全文
  • 在学习fegin前需要简单回顾下SpringBoot和SpringCloud 1、SpringBoot 随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重,繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术...

    在学习fegin前需要简单回顾下SpringBoot和SpringCloud
    1、SpringBoot
    随着动态语言的流行(Ruby、Groovy、Scala、Node.js),Java 的开发显得格外的笨重,繁多的配置、低下的开发效率、复杂的部署流程以及第三方技术集成难度大。
    在上述环境下,Spring Boot 应运而生。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须手动进行配置)的理念让你的项目快速运行起来。
    使用 Spring Boot 很容易创建一个独立运行(运行 jar,内嵌 Servlet 容器)、准生产级别的基于 Spring 框架的项目,使用 Spring Boot 你可以不用或者只需要很少的 Spring 配置。
    Spring Boot 核心功能
    1)独立运行的 Spring 项目
    Spring Boot 可以以 jar 包的形式独立运行,运行一个 Spring Boot 项目只需通过 java–jar xx.jar 来运行。
    2)内嵌 Servlet 容器
    Spring Boot 可选择内嵌 Tomcat、Jetty 或者 Undertow,这样我们无须以 war 包形式部署项目。
    3)提供 starter 简化 Maven 配置
    Spring 提供了一系列的 starter pom 来简化 Maven 的依赖加载,例如,当你使用了spring-boot-starter-web 时,会自动加入如图 1 所示的依赖包。
    4)自动配置 Spring
    Spring Boot 会根据在类路径中的 jar 包、类,为 jar 包里的类自动配置 Bean,这样会极大地减少我们要使用的配置。当然,Spring Boot 只是考虑了大多数的开发场景,并不是所有的场景,若在实际开发中我们需要自动配置 Bean,而 Spring Boot 没有提供支持,则可以自定义自动配置。
    5)准生产的应用监控
    Spring Boot 提供基于 http、ssh、telnet 对运行时的项目进行监控。
    6)无代码生成和 xml 配置
    Spring Boot 的神奇的不是借助于代码生成来实现的,而是通过条件注解来实现的,这是 Spring 4.x 提供的新特性。Spring 4.x 提倡使用 Java 配置和注解配置组合,而 Spring Boot 不需要任何 xml 配置即可实现 Spring 的所有配置。
    2、SpringCloud
    springcloud是微服务架构的集大成者,将一系列优秀的组件进行了整合。基于springboot构建,对我们熟悉spring的程序员来说,上手比较容易。
    服务发现——Netflix Eureka
    客服端负载均衡——Netflix Ribbon
    断路器——Netflix Hystrix
    服务网关——Netflix Zuul
    分布式配置——Spring Cloud Config

    Eureka
    作用:实现服务治理(服务注册与发现)
    简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。
    由两个组件组成:Eureka服务端和Eureka客户端。
    Eureka服务端用作服务注册中心。支持集群部署。
    Eureka客户端是一个java客户端,用来处理服务注册与发现。
    在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

    Ribbon
    作用:Ribbon,主要提供客户侧的软件负载均衡算法。
    简介:Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。
    关键点就是将外界的rest调用,根据负载均衡策略转换为微服务调用。Ribbon有比较多的负载均衡策略。

    Hystrix
    作用:断路器,保护系统,控制故障范围。
    简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

    Zuul
    作用:api网关,路由,负载均衡等多种作用
    简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。
    在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

    Config
    作用:配置管理
    简介:SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。
    这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

    3 Feign

    3.1 什么是Feign

    • Feign是Spring Cloud是Netflix组件中的一个轻量级RESTful的HTTP服务客户端,实现了负载均衡和Rest调用的开源框架,封装了Ribbon和RestTemplateT实现了WebService的面向接口编程,进一步降低了项目的耦合度。
    • Feign内置了Ribbon,用来做客户端负载均衡调用服务注册中心的服务。
    • Feign本身并不支持Spring MVC的注解,它有-套自己的注解,为了更方便的使用, Spring
      Cloud孵化了OpenFeign。Feign支持的注解和用法请参考官方文档: htpt:/github.com/openFeign/Feign 或spring.io官网文档
    • Feign是一种声明式、模板化的HTTP客户端(仅在Consumer中使用)。
    • Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。

    3.2 Feign解决什么问题

    Feign旨在使编写JAVAHTTP客户端变得更加容易, Feign 简化了RestTemplate代码,实现了ribbon负载均衡,使代码变得更加简洁,也少了客户端调用的代码,使用Feign实现负载均衡是首选方案。只需要你创建一个接口, 然后在上面添加注解即可。
    Feign是声明式服务调用组件,其核心就是:像调用本地方法-样调用远程方法,无感知远程HTTP请求。
    ●它解决了让开发者调用远程接口就跟调用本地方法一 样的体验,开发者完全感知不到这是远程方法,更感知不到这是个HTTP
    请求。无需关注与远程的交互细节,更无需关注分布式环境开发。
    ●它像Dubbo-样,Consumer 直接调用Provider接口方法,而不需要通过常规的Http Client构造请求再解析返回数据。

    3.3 Feign VS openFeign

    OpenFeign是Spring Cloud在Feign的基础上支持了Spring MVC的注解,如@RequesMapping 、@Pathvariable 等等。
    OpenFeign的@FeignClient 可以解析SpringMVC的@RequestMapping 注解下的接口,并通过动态代理的方式产生实现
    类,实现类中做负载均衡并调用服务。

    3.4 Feign 使用

    Feign的使用主要分为以下几个步骤:
    ●服务消费者添加Feign依赖;
    ●创建业务层接口,添加@FeignClient 注解声明需要调用的服务;
    ●业务层抽象方法使用SpringMVC注解配置服务地址及参数;
    ●启动类添加@EnableFeignClients 注解激活Feign组件。
    3.5 Feign 负载均衡
    Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特 性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
    简而言之:
    Feign 采用的是基于接口的注解
    Feign 整合了ribbon,具有负载均衡的能力
    整合了Hystrix,具有熔断的能力

    全局配置

        全局配置的方法非常简单,我们可以直接使用ribbon.<key>=<value>的方式来设置ribbon的各项默认参数。如下:
    

    #以下配置全局有效
    ribbon.eureka.enabled=true
    #建立连接超时时间,原1000
    ribbon.ConnectTimeout=60000
    #请求处理的超时时间,5分钟
    ribbon.ReadTimeout=60000
    #所有操作都重试
    ribbon.OkToRetryOnAllOperations=true
    #重试发生,更换节点数最大值
    ribbon.MaxAutoRetriesNextServer=10
    #单个节点重试最大值
    ribbon.MaxAutoRetries=1

    指定服务配置

        大多数情况下,我们对于服务调用的超时时间可能会根据实际服务的特性做一些调整,所以仅仅进行个性化配置的方式与使用Spring Cloud Ribbon时的配置方式是意义的,都采用<client>.ribbon.key=value的格式进行设置。但是,这里就有一个疑问了,<cleint>所指代的Ribbon客户端在那里呢?
    
        回想一下,在定义Feign客户端的时候,我们使用了@FeignClient注解。在初始化过程中,Spring Cloud Feign会根据该注解的name属性或value属性指定的服务名,自动创建一个同名的Ribbon客户端。如下:
    

    #以下配置对服务hello-service-provider有效
    hello-service-provider.ribbon.eureka.enabled=true
    #建立连接超时时间,原1000
    hello-service-provider.ribbon.ConnectTimeout=60000
    #请求处理的超时时间,5分钟
    hello-service-provider.ribbon.ReadTimeout=60000
    #所有操作都重试
    hello-service-provider.ribbon.OkToRetryOnAllOperations=true
    #重试发生,更换节点数最大值
    hello-service-provider.ribbon.MaxAutoRetriesNextServer=10
    #单个节点重试最大值
    hello-service-provider.ribbon.MaxAutoRetries=1

    负载均衡策略

        Spring Cloud Ribbon默认负载均衡策略是轮询策略,不过该不一定满足我们的需要。Ribbon一共提供了7种负载均衡策略,如果我们需要ZoneAvoidanceRule,首先要在application.properties文件中添加配置,如下所示:
    

    ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.ZoneAvoidanceRule
    不过,只是添加了如上配置,还无法实现负载均衡策略的更改。我们还需要实例化该策略,可以在应用主类中直接加入IRule实例的创建,如下:

    @EnableEurekaClient
    @SpringBootApplication
    @EnableFeignClients(basePackages = { “com.kyle.client.feign.inter” })
    public class Application {

    3.6 Feign 性能优化

    3.6.1.zip压缩
    1.1概述
    ​ gzip 介绍:gzip 是一种数据格式,采用 deflate 算法压缩数据;gzip 是一种流行的文件压缩算法,应用十分广泛,尤其是在 Linux 平台。

    gzip 能力:当 Gzip 压缩一个纯文本文件时,效果是非常明显的,大约可以减少 70% 以上的文件大小。

    gzip 作用:网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏览体验外,另一个潜在的好处是 Gzip 与搜索引擎的抓取工具有着更好的关系。

    1.2 HTTP协议中关于压缩传输的规定
    ​ 客户端向服务器请求中带有:Accept-Encoding:gzip,deflate 字段,向服务器表示客户端支持的压缩格式(gzip 或者 deflate),如果不发送该消息头,服务端默认是不会压缩的。

    ​ 服务端在收到请求之后,如果发现请求头中含有 Accept-Encoding 字段,并且支持该类型压缩,就会对响应报文压缩之后返回给客户端,并且携带 Content-Encoding:gzip 消息头,表示响应报文是根据该格式进行压缩的。

    ​ 客户端接收到请求之后,先判断是否有 Content-Encoding 消息头,如果有,按该格式解压报文。否则按正常报文处理。

    1.3 压缩案例
    局部配置
      只配置 Consumer 通过 Feign 到 Provider 的请求与相应的 Gzip 压缩。
      服务消费者 application.yml

    Feign gzip 压缩

    feign:
      compression:
        request:
          mime-types: text/xml,application/xml,application/json # 配置压缩支持的 MIME TYPE
          min-request-size: 512                                 # 配置压缩数据大小的最小阈值,默认 2048
          enabled: true                                         # 请求是否开启 gzip 压缩
        response:
          enabled: true                                         # 响应是否开启 gzip 压缩
    

    全局配置
      对客户端浏览器的请求以及 Consumer 对 Provider 的请求与响应都实现 Gzip 压缩。

    服务消费者 application.yml

    server:
      compression:
        # 是否开启压缩
        enabled: true
        # 配置压缩支持的 MIME TYPE
        mime-types: application/json,application/xml,text/html,text/xml,text/plain
    

    3.6.2. HTTP连接池
    ​ 我们知道,建立 HTTP 连接的过程是很复杂的一个过程,涉及到多个数据包的交换,很耗时间,比如建立TCP连接时,需要的三次握手和四次挥手开销就比较大。

    ​ 采用 HTTP 连接池,可以节约大量的 3 次握手 4 次挥手,这样能大大提升吞吐量。

    Feign 的 HTTP 客户端支持 3 种框架:HttpURLConnection、HttpClient、OkHttp;默认是 HttpURLConnection。可以通过查看源码 org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration.java 得知。

    传统的 HttpURLConnection 是 JDK 自带的,并不支持连接池,如果要实现连接池的机制,还需要自己来管理连接对象。

    HttpClient 相比传统 JDK 自带的 HttpURLConnection,它封装了访问 HTTP 的请求头,参数,内容体,响应等等;它不仅使客户端发送 HTTP 请求变得容易,而且也方便了开发人员测试接口(基于 HTTP 协议的),既提高了开发的效率,又提高了代码的健壮性

    那么如何使用呢?

    首先,在对应消费者项目中,添加对应依赖,因为本文中使用的Hoxton.SR1版本已经默认集成了 apache httpclient 依赖,所以只需要添加一个依赖即可

    <!-- 当前版本已经默认集成了 apache httpclient 依赖 -->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.11</version>
    </dependency>
    <!-- feign apache httpclient 依赖 -->
    <dependency>
        <groupId>io.github.openfeign</groupId>
        <artifactId>feign-httpclient</artifactId>
        <version>10.7.4</version>
    </dependency>
    

    然后,配置文件中开启即可

    feign:
      httpclient:
        enabled: true # 开启 httpclient
    

    **注意:**如果使用 HttpClient 作为 Feign 的客户端工具。那么在定义接口上的注解是需要注意的,如果传递的参数是一个自定义的对象(对象会使用 JSON 格式来专递),需要配置参数类型,例如:@GetMapping(value = “/single/pojo”, consumes = MediaType.APPLICATION_JSON_VALUE)。本文中使用的 Spring CLoud 版本,已无需手动配置。

    3.6.3.请求超时
    ​ Feign 的负载均衡底层用的就是 Ribbon,所以这里的请求超时配置其实就是配置 Ribbon。

    在服务压力比较大的情况下,可能处理服务的过程需要花费一定的时间,而默认请求超时的配置是 1s 所以我们需要调整该配置延长请求超时时间。

    ​ 在消费者端配置文件添加:

    ribbon:
      ConnectTimeout: 5000 # 请求连接的超时时间 默认的时间为 1 秒
      ReadTimeout: 5000    # 请求处理的超时时间
    
    展开全文
  • 2、服务网关: Zuul 3、服务负载均衡:Ribbon 4、服务之间调用:Feign 5、服务熔断:Hystrix---因官网不继续维护,可以使用阿里提供的Alibaba Sentinel轻量级的流量控制、熔断降级 Java 库 6、配置中心:config---...

    springcloud常用组件
    1、服务注册与发现:Eureka
    2、服务网关: Zuul
    3、服务负载均衡:Ribbon
    4、服务之间调用:Feign
    5、服务熔断:Hystrix   ---因官网不继续维护,可以使用阿里提供的Alibaba Sentinel 轻量级的流量控制、熔断降级 Java 库
    6、配置中心:config     ---如果不想自己维护,可以使用阿里云nacos作为配置中心



    4、Feign组件
    Feign的关键机制是使用了动态代理
    1、 首先,对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
    2、 接着调用接口的时候,本质就是调用Feign创建的动态代理
    3、 Feign的动态代理会根据在接口上的@RequestMapping等注解,来动态构造要请求的服务的地址
    4、 针对这个地址,发起请求、解析响应,其实就是http请求的封装
    (通过JDK的动态代理来生成RequestTemplate。RequestTemplate中包含请求的所有信息,如请求参数,请求URL等
    RequestTemplate生成Request,然后将Request交给client处理,这个client默认是JDK的HTTPUrlConnection)

    Feign是和Ribbon以及Eureka紧密协作的
    1、 首先Ribbon会从Eureka Client里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些机器上,在监听哪些端口
    2、 然后Ribbon就可以使用默认的Round Robin算法(轮询,随机,权重等等),从中选择一台机器
    3、 Feign就会针对这台机器,构造并发起请求

    preview

    超时重试次数
    https://blog.csdn.net/varyall/article/details/88639318

    展开全文
  • Spring Cloud-Feign设计原理

    万次阅读 多人点赞 2018-09-26 15:42:50
    在Feign 底层,通过基于面向接口的动态代理方式生成实现类,将请求调用委托到动态代理实现类,基本原理如下所示: public class ReflectiveFeign extends Feign { ///省略部分代码 @Override ...
  • 经过微服务精通之Ribbon原理解析的学习,我们了解到了服务消费者获取服务提供者实例的过程,都是通过RestTemplate来实现的,而且,都是模板化操作。那spring cloud是否有哪个组件可以通过注解或者配置的方式,来简化...
  • Feign的工作原理

    千次阅读 2019-10-31 19:42:39
    一第一步 在开发微服务时,会在主程序入口添加@EnableFeignClients注解开启对FeignClient扫描加载处理。根据FeignClient的开发规范,定义接口并加@FeignClient注解。 二第二步 当程序启动时,会进行包扫描,扫描...
  • 一次奇妙的fegin排错旅行 起因 一个同事调用fegin的时候,发现调用返回的是null。但是日志却打印出了返回值。简单的来说, @GetMapping("/contract/getSignerInfo") public ContractSignerRecord getSignerInfo(@...
  • Feign实现原理

    千次阅读 2019-07-18 17:00:00
    什么是Feign? Feign是一个java的到http客户端绑定的开源项目。 Feign的主要目标是将Java Http 客户端变得简单。Feign的源码地址:...Feign的工作原理 feign是一个伪客户端,即它不做任何的...
  • Spring Cloud Feign原理详解

    千次阅读 2019-05-05 16:17:37
    Feign的原理步骤可以理解为: a.通过主类上的EnableFeignClients 注解开启FeignClient; b.根据Feign 的规则实现接口,并加上FeignClient注解,供调用的地方注入调用; c.程序启动后,会扫描所有...
  • Feign对于使用过SpringCloud微服务的程序员来说,想必都很熟悉,微服务之间的调用时基于Http方式的,ribbon提供了一个RestTemplate的类进行调用,不过并不是好用,服务与服务之间调用的化代码冗余量很大,所以Feign...
  • Feign原理 (图解)

    万次阅读 多人点赞 2020-07-28 21:17:51
    为了清晰的介绍SpringCloud中Feign运行机制和原理,在这里,首先为大家梳理一下Feign中几个重要组件。 1.2.1 远程接口的本地JDK Proxy代理实例 远程接口的本地JDK Proxy代理实例,有以下特点: (1)Proxy代理实例...
  • Feign设计原理   1.Feign如何实现面向接口编程?    为什么在主启动类上使用@EnableFeignClients就可以使用面向接口方式调用Http服务呢?     获取@EnableFeignClients注解 当...
  • Feign工作原理详解(一)

    2020-11-09 21:11:48
    1. Feign 的工作流程 首先我们了解一下Feign的工作流程,以访问github中的openfeign的contributor信息为例 github中的API列表如下: https://api.github.com/ 我们将访问: repository_url: ...
  • SpringCloud——Feign实例及原理

    万次阅读 2018-08-06 11:19:27
    ReflectiveFeign内部使用了jdk的动态代理为目标接口生成了一个动态代理类,这里会生成一个InvocationHandler(jdk动态代理原理)统一的方法拦截器,同时为接口的每个方法生成一个SynchronousMethodHandler拦截器,并...
  • 直接看原文:Spring Cloud-Feign设计原理
  • 要想了解Spring Cloud OpenFeign整体实现原理,通过之前使用方式的介绍,我们需要回答如下四个问题: @FeignClient 如何根据接口生成实现(代理)类的? 生成的实现(代理)类是如何适配各种HTTP组件的? 生成的实现...
  • Dubbo 与 Feign调用的区别

    千次阅读 2020-12-07 21:05:11
    一、相同点 ... 二、区别 1、协议 Dubbo: ...非常灵活。 默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。...支持4种算法(随机、轮询、活跃度、Hash一致...
  • feign与dubbo

    2021-08-01 08:03:16
    1.1 原理 Feign远程调用原理,这篇文章写得比较好。 1.2 优化策略 既然feign的通讯协议是http的,那么http的优化策略同样适用于feign 常规配置如下 feign: hystrix: enabled: true client: config: default: ...
  • SpringCloud原理之feign

    2021-08-27 13:55:57
    他只是对原生的fegin做了一些封装,所以刨根问底的话,我们还是多了解了解原生的Fegin,对于我们理解Spring Cloud feign是很有帮助的 Feign使用简介 基本用法 基本的使用如下所示,一个对于canonical Retrofit sample...
  • SpringCloud服务消费者(Ribbon+Feign)原理及示例 上两章节,介绍了关于注册中心-Eureka的使用及高可用的配置示例,本章节开始,来介绍服务和服务之间如何进行服务调用的,同时讲解下几种不同方式的服务调用。
  • 这篇文章主要介绍了Java匿名内部类原理与用法,结合实例形式分析了Java匿名内部类的概念、原理、应用与相关操作注意事项,需要的朋友可以参考下一 点睛匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的...
  • Spring Cloud Feign相关原理分析

    千次阅读 2019-05-24 12:31:49
    1.认识Spring Cloud Feign 在使用Spring Cloud构建的微服务架构中,Feign用来提供声明式的服务客户端定义方式。 ... ... 这里我们需要关注两个注解:@FeignClient:使用在我们定义的服务接口上,表示...
  • Quartz是OpenSymphony开源组织的一个Java开源项目,在2009被Terracotta收购。Quartz官网 Quartz任务调度的主要元素有: Trigger(触发器) Scheduler(任务调度器) Job(任务) 其中Tri
  • 作者:徐刘根来源:https://blog.csdn.net/xlgen157387/article/details/79840134序列化和反序列化作为Java里一个较为基础的知识点,大家心里也有那么几句要说的,但我相信很多小伙伴掌握的也就是那么几句而已,如果...
  • 用户
  • ) 场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 ) AOP的实现原理 那Spring中AOP是怎么实现的呢?Spring中AOP的有两种实现方式: 1、JDK动态代理 2、Cglib动态代理 JDK动态代理 1.引入依赖,...
  • springcloud学习笔记

    2019-05-28 22:38:21
    点我cap原理介绍 p一般一定成立,c和a会产生矛盾 一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)。 如果保证 G2 的一致性,那么 G1 必须在写操作时,锁定 G2 的读...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,267
精华内容 506
关键字:

fegin原理