SpringCloud-openFeign

x33g5p2x  于2021-12-18 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(216)

openFeign和Feign
什么是Feign
Feign 是一个声明式的我web服务客户端,使得编写web服务客户端变得非常容易 只要 创建一个 接口就行,然后后面加上注解 就可以
feign
Feign 只在使编写java Http 客户端变得更容易
前面在使用 Ribbon +RsetTemplate时利用RsetTemplate对Http请求的封装处理,形成了一套模板化的调用方法,但是在实际 开发中,由于对服务依赖的调用可能不止一个,往往一个接口会被多处调用,所以通常会针对 每一为服务自行封装一些客户 端类来包装这些依赖服务的调用,所以Feign在此基础上做了进一步的封装, 由它来帮助我们定义和实现依赖服务接口的定义 在Feign的实现下 我们只需创建一个接口并使用注解的方式来配置它(以前是Dao接口上面标注Mapper注解 ,现在是一个微服务接口上面标注一个Feign注解即可),即可完成对服务提供方的 接口绑定 ,简化了使用 SpringCloud Rinnon时 自动封装服务调用客户端的开发量
Feign集成Ribbon
利用Ribbon维护了 微服务的服务列表信息,并且通过轮询实现了客户端的负载均衡,而与Ribbon不同的是 通过Feign只需要定义服务绑定接口且以声明的方式的方法,简单的实现了服务调用
openFeign:
openFeign是SpringCloud在Feign的基础上支持了SpringMvc的注解openFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态的方式产生实现类 ,实现类中的负载均衡并调用其他服务

pom依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

主启动类 加@EnableFeignClients 开启openFeign的注解

@SpringBootApplication
@EnableFeignClients
public class OpenFeign {

    public static void main(String[] args) {
        SpringApplication.run(OpenFeign.class,args);
    }
}

controller层正常写

在接口的 service层添加 @FeignClient(value = "注册eureka的服务名")

package com.tang.cloud.service;

import com.tang.cloud.entities.CommonResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import sun.awt.SunHints;

@FeignClient(value = "CLOUD-PROVIDER")
public interface OpenFeignService {

    @GetMapping(value = "select/{id}")
    public CommonResult getId(@PathVariable("id") Long id);
}

完成 自测试通过就可以

Feign的在发请求的时候只等待一秒钟,如果业务处理超过一秒钟的话,导致Feign客户端直接连接超时的错误,为了避免此错可以设置超时时间的配置

ribbon:
  ReadTimeout: 6000 #6秒钟
  ConnectTimeout: 6000

Feign可以打印日志

package com.atguigu.springcloud.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FeignConfig {

    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

日志的级别

NONE:默认的,不显示任何日志
BASIC:仅记录请求的方法 url 响应的状态码,执行时间
HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据

yml 配置

logging:
  level:
    com.tang.cloud.service.OpenFeignService: debug

相关文章