OpenFeign使用

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: OpenFeign使用

前提


服务注册中心Nacos+服务提供者

Sentinel

会搭建SpringBoot(2.x)+web


服务消费者:OpenFeign使用


代码下载:https://github.com/cbeann/share/tree/master/nacos-sentinel-openfeign

在SpringBoot(2.2.2)+web的基础之上

添加pom依赖


<!--  SpringCloud alibaba nacos    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!--   sentinel     -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <!--&lt;!&ndash;   openfeign     &ndash;&gt;-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>


修改application.yml文件


server:
  port: 80
spring:
  application:
    name: sentinel-ribbon-openFeign
  cloud:
    nacos:
      discovery: #Nacos注册中心地址
        server-addr: 39.105.30.146:8848
    sentinel:
      transport: #dashboard地址
        dashboard: localhost:8080
        port: 8719  #默认端口,如果被占用则从8719依次+1扫描
###sentinel可以监控到此服务
management:
  endpoints:
    web:
      exposure:
        include: "*"
###激活Sentinel对openFeign的支持
feign:
  sentinel:
    enabled: true


修改主启动类


@EnableDiscoveryClient
@EnableFeignClients


编写service层(☆☆☆☆☆),虽然是一个接口,但是可以被注入到controller中


@FeignClient(value = "provider",//服务名称
        fallback = HelloFallbackService.class)//回调方法
public interface HelloService {
    @GetMapping(value = "/provider/get/{id}")
    String PaymentSQL(@PathVariable("id") Long id);
}


@Component
public class HelloFallbackService implements HelloService {
    @Override
    public String PaymentSQL(Long id) {
        return "------fallback";
    }
}


编写控制层


@RestController
public class HelloController {
    @Autowired
    private HelloService helloService;
    @GetMapping(value = "/consumer/get/{id}")
    public String paymentSQL(@PathVariable("id") Long id) {
        return helloService.PaymentSQL(id);
    }
}


OpenFeign的超时控制


如下面代码所示,当请求/consumer/payment/feign/timeout 时,调用的微服务是sleep三秒后在返回结果,但是Feign规定一秒请求不到结果就报错,因为我们需要修改配置让其支持更久的响应时间。


@RestController
public class OrderFeignController {
    @Autowired
    private PaymentFeignService paymentFeignService;
    @GetMapping(value = "/consumer/payment/feign/timeout")
    public String paymentFeignTimeout(){
        String s = paymentFeignService.paymentFeignTimeout();
        return s;
    }
}


修改办法

修改application.yml配置文件


#设置feign 客户端超时时间(openFeign默认支持ribbon)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000


OpenFeign的日志增强


添加OpenFeign的日志类


import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author CBeann
 * @create 2020-04-08 23:25
 */
@Configuration
public class FeignConfig {
    @Bean
    Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}


修改yml文件


logging:
  level:
    #feign日志以什么级别监控哪个接口
    #feign日志以debug级别监控com.imooc.springcloud.service.PaymentFeignService
    com.imooc.springcloud.service.PaymentFeignService: debug


6.png


总结


OpenFeign和原来的Feign用法差不多,就是添加的依赖不一样

原来是


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


现在是


 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
负载均衡 架构师 Java
详细讲解OpenFeign的使用姿势!
学会使用Feign最贱优雅地调用服务
22132 9
详细讲解OpenFeign的使用姿势!
|
5月前
|
Java Apache 微服务
OpenFeign
OpenFeign
71 2
|
4月前
|
XML JSON Java
OpenFeign深入学习笔记
OpenFeign 是 Spring Cloud 生态系统中的一个强大工具,它使得微服务之间的通信变得更加简单和高效。通过使用 OpenFeign,开发者可以专注于业务逻辑的实现,而不需要关心底层的 HTTP 通信细节。
|
7月前
|
负载均衡 前端开发 Java
Spring Cloud 之 OpenFeign
Spring Cloud OpenFeign是Spring官方的声明式服务调用组件,简化了远程服务调用,使其如同调用本地方法。核心注解包括`@FeignClient`、`@EnableFeignClients`、`@GetMapping`和`@PostMapping`。实践中,通过在`pom.xml`添加依赖,创建Feign接口,配置`@FeignClient`,在启动类启用Feign,以及自定义超时设置来实现远程调用和负载均衡。
|
8月前
|
负载均衡 Java 应用服务中间件
Ribbon、Feign和OpenFeign的区别来了
Ribbon、Feign和OpenFeign的区别来了
344 2
|
负载均衡 算法 Java
SpringCloud OpenFeign
SpringCloud OpenFeign
165 0
|
8月前
|
负载均衡 监控 前端开发
Feign 与 OpenFeign
Feign 与 OpenFeign
154 0
|
JSON 负载均衡 Java
Springcloud OpenFeign 详解
Springcloud OpenFeign 详解
338 1
|
8月前
|
JSON Java Apache
spring cloud 整合Feign经行远程调用
spring cloud 整合Feign经行远程调用
91 0
|
负载均衡 Java Nacos
原来这就是大名鼎鼎的OpenFeign
年前的时候我发布两篇关于nacos源码的文章,一篇是聊一聊nacos是如何进行服务注册的,另一篇是一文带你看懂nacos是如何整合springcloud -- 注册中心篇。今天就继续接着剖析SpringCloud中OpenFeign组件的源码,来聊一聊OpenFeign是如何工作的。

热门文章

最新文章

下一篇
开通oss服务