spring boot负载均衡Feign


git地址
https://github.com/a18792721831/studySpringCloud

1. 创建 Feign

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 配置gradle

在这里插入图片描述

repositories {
    maven{
        url 'https://maven.aliyun.com/'
    }
    maven{
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
    maven{
        url 'https://repo1.maven.org/maven2/'
    }
    mavenCentral()
}

3. Feign配置

在这里插入图片描述

server:
  port: 8000

eureka:
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/


logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  application:
    name: eureka-feign-client

4. 开启Feign

在SpringbootfeignApplication类增加注解
EnableFeignClients–开启Feign
EnableEurekaClient–开启Eureka
在这里插入图片描述

5. 创建Feign配置

在这里插入图片描述

6. 创建FeignDao

在这里插入图片描述
其中,
EUREKA-CLIENT表示eureka-client服务提供者的服务名字
FeignConfig.class指定Feign的配置
注意:
1.这是接口
2.GetMapping中是Eureka-client服务提供者暴露的接口的url请求地址
说明:
我个人比较喜欢将Feign定位于Dao层,当然Service层也可。

7. 创建FeignService

在这里插入图片描述

8. 创建FeignController

在这里插入图片描述

9. 启动&验证

首先启动eureka-server
接着启动eureka-client服务提供者(多实例启动)
最后启动feign-client服务消费者
全部启动后是5个实例
在这里插入图片描述
访问eureka-server的主面板
在这里插入图片描述
接着验证eureka-client服务提供者的接口
在这里插入图片描述
然后请求feign的接口
在这里插入图片描述
在这里插入图片描述
发现其效果与Ribbon一致,都是轮询访问的。

10. Feign与Ribbon的关系

在这里插入图片描述
从github看,Feign维护很好,Issues处理比较及时。
而且从readme中看,feign的计划什么的都有,且分短期、中期和长期计划
在这里插入图片描述
而且给的例子也很多。赞。

从Feign的jar包依赖看
在这里插入图片描述
其依赖了ribbon.
对于Feign有书上是这样介绍的

Feign 受 Retrofit、JAXRS-2.0 和 WebSocket 的影响,采用了声明式 API 接口的风格,将Java Http 客户端绑定到它的内部。Feign 的首要目标是将JavaHttp客户端调用过程变得简单。Feign 的源码地址:https://github.com/OpenFeign/feign.

所以可以看到Feign的重点应该不是实现与Ribbon相同的功能,而是在Ribbon的基础上开发新的功能的。

11. FeignClient

我们在FeignDao上加上FeignClient注解的
在这里插入图片描述
注解的属性:
在这里插入图片描述
看到了与Ribbon有关的包
在这里插入图片描述

  • FeignClient 注解被@Target(ElementType.TYPE)修饰,表示 FeignClient 注解的作用目标在接口上。
  • @Retention(RetentionPolicv.RUNITINF)注解表明该注解会在Class字节码文件中存在,在运行时可以通过反射获取到。
  • @Documented 表示该注解将被包含在 Javadoc中。
  • @FeignClient 注解用于创建声明式API接口,该接口是RESTful风格的。Feign被设计成插拔式的,可以注入其他组件和Feign一起使用。最典型的是如果Ribbon可用,Feign会和Ribbon 相结合进行负载均衡。
  • value()和 name()一样,是被调用的服务的ServiceId。
  • url()直接填写硬编码的Url 地址。
  • decode404即404是被解码,还是抛异常。
  • configuration()指明FeignClient的配置类,默认的配置类为FeignClientsConfiguration类,在缺省的情况下,这个类注入了默认的 Decoder、Encoder 和 Contract 等配置的 Bean。
  • fallback()为配置熔断器的处理类。

12. FeignClient配置

Feign Client 默认的配置类为 FeignClientsConfiguration,这个类在 spring-cloud-netflix-core的jar包下。
在这里插入图片描述
打开这个类,可以发现这个类注入了很多Feign相关的配置Bean,包括FeignRetryer、FeignLoggerFactory 和FormattingConversionService 等。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
另外,Decoder、Encoder 和 Contract这3个类在没有Bean被注入的情况下,会自动注入默认配置的Bean,即ResponseEntityDecoder、SpringEncoder 和 SpringMvcContract。
在这里插入图片描述

默认注入的配置如下。

  • Decoder feignDecoder:ResponseEntityDecoder。
  • Encoder feignEncoder:SpringEncoder
  • Logger feignLogger:SIf4jLogger。
  • Contract feignContract:SpringMvcContract。
  • Feign.Builder feignBuilder:HystrixFeign.Builder。
  • FcignClientsConfiguration 的配置类部分代码如下,
  • @ConditionalOnMissingBean 注解表示如果没有注入该类的Bean就会默认注入一个Bean。
发布了182 篇原创文章 · 获赞 88 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/a18792721831/article/details/104523325
今日推荐