栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringCloud OpenFeign的功能与使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringCloud OpenFeign的功能与使用

文章目录

1.OpenFeign使用步骤

1.1OpenFeign是啥玩意儿?他和Feign有啥区别?1.2导入pom文件1.3 yml文件1.4主启动类1.5 service类1.6 controller类1.7 结果展示1.8 总结及注意事项 2.OpenFeign超时控制3.OpenFeign日志打印功能

3.1什么是OpenFeign日志3.2日志级别3.3配置日志bean

1.OpenFeign使用步骤 1.1OpenFeign是啥玩意儿?他和Feign有啥区别?

Feign是一个声明式的Web Service客户端。它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解,比如:FeignClient注解。Feign有可插拔的注解,包括Feign注解和JAX-RS注解。
Feign也支持编码器和解码器,Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。(官网上就是这么写的)

说白了你以前调用微服务接口必须通过restTemplate.getForObject去远程调用,但是Feign的出现你就不用非得使用restTemplate了,你可以向调用本地接口一样。OpenFegin就是在Fegin的基础上可以支持SpringMVC注解如requestMapping之类的。Fegin和OpenFegin里面都支持负载均衡

1.2导入pom文件

在pom文件当中要加上OpenFegin的依赖。

        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
    public static void main(String[] args) {
        SpringApplication.run(OrderFeginMain80.class,args);
    }
}
1.5 service类
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")//一定要加这个注解value值为服务名称标注要找哪个服务提供者
public interface PaymentFeginService {
    @GetMapping(value = "/payment/get/{id}")//注解的路径要和提供服务的controller路径一样
    CommonResult getPaymentById(@PathVariable("id") Long id);//和controller一样
}
1.6 controller类
@RestController
@Slf4j
public class PaymentFeginController {
    @Autowired
    private PaymentFeginService paymentFeginService;
    @GetMapping(value = "/consumer/payment/get/{id}")
    public CommonResult getPaymentById(@PathVariable("id") Long id)
    {
        return paymentFeginService.getPaymentById(id);//直接通过service类调用而不是通过restTemplate远程调用
    }
}

这个虽然看起来是调你本地的应用但是他是在调用你远程提供的服务所以你要确保你远程的服务要提供相应的功能

1.7 结果展示

1.8 总结及注意事项

首先你在消费者的启动类上要加上@EnableFeginClients,然后你在消费者的service类中要加上@FeginClient(服务名称)这样的注解,然后这个接口中的方法的参数,路径要和你提供服务的方法一模一样(名称可以不一样)否则会报错。

@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")//一定要加这个注解value值为服务名称标注要找哪个服务提供者
public interface PaymentFeginService {
    @GetMapping(value = "/payment/find/{id}")//我把这个路径改了
    CommonResult getPaymentById(@PathVariable("id") Long id);
}

结果:

2.OpenFeign超时控制

当消费者访问服务提供者这个过程当中出现了网络超时那么就会报超时的错误。比如说我重新写一个方法在return之前我做一些延时操作那么就会报超时的错误

比如说在服务提供者加上这个方法,暂停3s后返回serverPort

    @GetMapping(value = "/testTimeOut")
    public String TimeOutFeignTest(){
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return serverPort;
    }

(OpenFegin配置略过)

结果是

出现了Read timed out的错误,那么我们怎么让延长这个超时时间呢?只需要更改yml文件就好了

server:
  port: 80
eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
ribbon:
  ReadTimeout: 5000 #把他改成5s钟超时就行了
  ConnectTimeout: 5000

改完之后结果是

3.OpenFeign日志打印功能 3.1什么是OpenFeign日志

Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节。说白了就是对Fegin接口的调用情况进行监控和输出。

3.2日志级别

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态及执行时间;

HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;

FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

3.3配置日志bean

@Configuration
public class FeginConfig {
    @Bean
    Logger.Level feginLoggerLevel(){
        return Logger.Level.FULL;
    }
}

yml文件加上这一段

logging:
  level:
    #他是什么级别监控哪个接口
    com.wjz.springcloud.service.PaymentFeginService: debug

调用这个接口你可以在后台清晰地看到HTTP调用的信息


参考:尚硅谷。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/731993.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号