首页 > 其他分享 >OpenFeign优雅的远程调用

OpenFeign优雅的远程调用

时间:2023-04-17 19:58:50浏览次数:30  
标签:Feign 调用 OpenFeign 配置 feign 优雅 注解 日志 public

OpenFeign

目录旁边可以查询具体的目录结构和跳转

一.快速开发

1.依赖

<!‐‐ openfeign 远程调用 ‐‐>
<dependency>
 	<groupId>org.springframework.cloud</groupId>
 	<artifactId>spring‐cloud‐starter‐openfeign</artifactId>
 </dependency>

2.编写调用接口+@FeignClient注解(注解作用:声明为Feign客户端接口,抽取方法的公有uri地址)

QQ截图20230330000412

@FeignClient(name = "stock-service",path = "/stock")
public interface StockFeignService {

    @RequestMapping("/reduct")
    String reduct();
}

3.调用端在启动类上添加@EnableFeignClients注解

@EnableFeignClients(basePackages = "com.zxy.feign")//开启当前服务支持Feign客户端,作用扫描所有客户端接口

@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }

}

4.注入Feign客户端对象(不再使用RestTemplate进行处理)

@RestController
@RequestMapping("/order")
public class OrderController {

    @Resource
    private StockFeignService stockFeignService; //注入Feign客户端

    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String msg = stockFeignService.reduct();
        return "hello Feign!"+msg;
    }
}

二.Feign日志配置

1.debug日志级别开启

不管是全局配置还是局部配置都需要开启包的debug基本日志

#springboot的默认日志为info,Feign的日志是debug不会输出 开启对应接口类的包设置为debug级别
logging:
  level:
    com.zxy.feign: debug

2.全局配置

//注意: 此处配置@Configuration注解就会全局生效,如果想指定对应微服务生效,就不能配置
@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel() {
        //输出日志的内容基本FUll  也可以选择其他的
        return Logger.Level.FULL;
    }
}

3.局部配置

方法一 配置类

//1.去掉@Configuration
public class FeignConfig {
    @Bean
    public Logger.Level feignLoggerLevel() {
        //输出日志的内容基本FUll  也可以选择其他的
        return Logger.Level.FULL;
    }
}
//2.对应服务接口@FeignClient中添加配置configuration = FeignConfig.class
@FeignClient(name = "product-service",path = "/product",configuration = FeignConfig.class)
public interface ProductFeignService {

    @RequestMapping("/{id}")
    String get(@PathVariable("id") Integer id);
}

方法二 (yml配置)

通过源码可以看到日志等级有 4 种,分别是:
NONE【性能最佳,适用于生产】:不记录任何日志(默认值)。
BASIC【适用于生产环境追踪问题】:仅记录请求方法、URL、响应状态代码以及
执行时间。
HEADERS:记录BASIC级别的基础上,记录请求和响应的header。
FULL【比较适用于开发及测试环境定位问题】:记录请求和响应的header、body
和元数据。
#feign日志局部日志
feign:
  client:
    config:
      stock-service:
        loggerLevel: BASIC

三.契约配置(基本无用)

​ Spring Cloud 在 Feign 的基础上做了扩展,使用 Spring MVC 的注解来完成Feign的功

能。原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的

注解方式来定义客户端也是可以的,通过配置契约来改变这个配置,Spring Cloud 中默认的

是 SpringMvcContract。

​ Spring Cloud 1 早期版本就是用的原生Fegin. 随着netflix的停更替换成了Open feign

1.修改契约配置,支持Feign原生的注解

方法一(配置类)

/**
* 修改契约配置,支持Feign原生的注解
*@return
*/
@Bean
public Contract feignContract() {
 return new Contract.Default();
}

方法二(yml)

feign:
  client:
  	config:
  		mall‐order: #对应微服务
  			loggerLevel: FULL
  			contract: feign.Contract.Default #指定Feign原生注解契约配置

注意:修改契约配置后,OrderFeignService 不再支持springmvc的注解,需要使用Feign原

生的注解

2.OrderFeignService 中配置使用Feign原生的注解

@FeignClient(value = "mall‐order",path = "/order")
public interface OrderFeignService {
@RequestLine("GET /findOrderByUserId/{userId}")
public R findOrderByUserId(@Param("userId") Integer userId);
}

四.超时时间配置

通过 Options 可以配置连接超时时间和读取超时时间,Options 的第一个参数是连接的超时

时间(ms),默认值是 2s;第二个是请求处理的超时时间(ms),默认值是 5s。

全局配置

@Configuration
public class FeignConfig {
    @Bean
    public Request.Options options() {
    return new Request.Options(5000, 10000);
	}
}

yml中配置

feign:
    client:
       config:
         mall‐order: #对应微服务
             # 连接超时时间,默认5s
             connectTimeout: 5000
             # 请求处理超时时间,默认3s
             readTimeout: 3000

五.修改负载均衡配置

和Nacos一样

OpenFeign服务yml配置和依赖综合

#springboot的默认日志为info,Feign的日志是debug不会输出 开启对应接口类的包设置为debug级别
logging:
  level:
    com.zxy.feign: debug
 #feign
feign:
  client:
    config:
      stock-service:
        loggerLevel: BASIC #feign日志局部日志
      mall‐order: #对应微服务
             # 连接超时时间,默认5s
             connectTimeout: 5000
             # 请求处理超时时间,默认3s
             readTimeout: 3000
父项目的父依赖
<dependencyManagement>
        <dependencies>
            <!--同理也可以把springboot版本控制添加进入,parent留给公司项目父依赖继承-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <!--解决maven单继承问题 可以多继承-->
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--Spring Cloud alibaba的版本控制没通过dependency完成继承-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--spring Cloud版本控制-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


<!‐‐ openfeign 远程调用 ‐‐>
<dependency>
 	<groupId>org.springframework.cloud</groupId>
 	<artifactId>spring‐cloud‐starter‐openfeign</artifactId>
 </dependency>

标签:Feign,调用,OpenFeign,配置,feign,优雅,注解,日志,public
From: https://www.cnblogs.com/kidzxy/p/17326125.html

相关文章

  • API 调用次数限制实现
    在开发接口服务器的过程中,为了防止客户端对于接口的滥用,保护服务器的资源,通常来说我们会对于服务器上的各种接口进行调用次数的限制。比如对于某个用户,他在一个时间段(interval)内,比如1分钟,调用服务器接口的次数不能够大于一个上限(limit),比如说100次。如果用户调用接口的次数......
  • 业务扩展:图灵机器人调用(API)接口模式的开发流程及其注意事项
    业务场景:在网站添加一个可以回答用户问题的对话机器人;解决方案:使用三方图灵机器人(turing)进行语料库控制,数据统计,问题反馈等;操作流程:1、申请图灵开发者账号权限,官网网站:http://www.tuling123.com/2、购买相应套餐获取机器人功能,完成认证之后可获得免费版,未完成认证则需要完成套......
  • 优雅连接
    优雅连接什么是优雅关机?优雅关机就是服务端关机命令发出后不是立即关机,而是等待当前还在处理的请求全部处理完毕后再退出程序,是一种对客户端友好的关机方式。而执行Ctrl+C关闭服务端时,会强制结束进程导致正在访问的请求出现问题。如何实现优雅关机?Go1.8版本之后,http.Server......
  • this指针 (保存调用成员函数对象的地址)
    1.在调用成员函数前,先将对象地址存入ecx寄存器,进入函数后将ecx压栈保存对象地址,当需要用到this指针时,再弹栈取出赋值给函数内部自带的一个this指针2.数据成员是由this指针+偏移取到的。类的对齐规则和结构体一致3.静态成员函数没有this指针4.若函数形参和成员......
  • 让 Spartacus 服务器端渲染引入 long API 调用超时机制的两种配置方法
    两种方法,使用config.backend.timeout={浏览器:...,服务器:...},或者可以更具体地配置,即基于Request粒度,通过将HTTP_TIMEOUT_CONFIGHttpContextToken传递给AngularHttpClient的方法来针对每个具体请求进行配置。在SSR(Node.js)中,超时处理耗时过长的外部http调用是一项尤为......
  • 远程调用之负载均衡Ribbon-No instances available for localhost ribbon
    如果使用的是多个实例情况,远程调用就不能写地址,否则远程调用报Noinstancesavailableforlocalhostribbon而是应该写成服务的名称 ......
  • Android Studio调用高德地图api
    一.搜索高德开放平台,进行注册并登录,进入到自己的控制台,打开应用管理下的我的应用,点击创建新应用。1.关于获取发布版安全码SHA1的过程如下:    打开AndroidStudio下方的Terminal,并自行找到.android在电脑中的位置,找到了之后,按照下图所示:   之后执行keytool-lis......
  • 只有 3 项的开发人员日常检查清单是优雅的简单
    待办事项列表通常是垃圾。他们只会变得更长。你有一种一直在跑步机上的感觉。对于大多数开发人员来说,我们永远不会完成我们的待办事项列表。从这个意义上说,待办事项清单是一种令人沮丧的生产力工具。但是,如果您提炼出一份最重要、最可完成的任务清单,会怎样呢?想象一下,使用更简......
  • 2023【xm格式转不了mp3】教你正确下载喜马拉雅mp3,并优雅获取音频!
    喜马拉雅Windows和Mac客户端下载缓存的音频是xm格式,而且限制只可使用该喜马拉雅软件才能打开,而且经过加密的,因此对于电脑小白来说就不要想着解密xm格式的文件了,而且网上基本没有xm转mp3/m4a的工具。 这次分享的不是如何将xm格式转换成mp3的工具,而是采用了跳过xm格式。直接下载......
  • 通过OpenFeign远程调用同局域网的其他接口
    通过OpenFeign远程调用同局域网的其他接口需要的依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!--feig......