当前位置: 首页 > news >正文

SpringCloud之模板化Http客户端--Feign的入门和高级使用

(一)Feign概述

Feign是Netflix开发的声明式,模板化的Http客户端,Feign可以帮助我们更加便捷的调用HTTP API。SpringCLoud对Feign进行了增强,使得Feign支持SpringMVC注解,并整合Ribbon和Eureka,从而让Feign更加实用方便。

对feign的实战我们依旧用前面的用户管理员微服务,这个demo包含用户微服务,管理员微服务和Eureka注册中心,在上面一篇博客用ribbon调用用户微服务时,我们用到了下面这段代码:

User user= restTemplate.getForObject("http://userservice/user/1",User.class);

 相比直接填写ip地址和端口号,ribbon使用微服务名称代替ip和端口号确实让代码更加容易维护,但是如果每个微服务都要通过url拼接还是显得不方便,Feign就帮我们解决了这个问题。

(二)Feign的使用

使用Feign主要需要以下四步骤:

1.导入依赖

2.配置调用接口

3.在启动类上激活feign

4.通过自动的接口调用远程微服务

2.1 导入依赖

<!--springcloud整个的openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.2 配置调用接口

新建一个Feign包,在Feign包下新建接口,名字可以自己定义,我给它命名为UserFeignClient。这个接口主要配置两个内容,在类名前声明需要调用的微服务名称,在方法名之前声明需要调用的微服务接口:

/**
 * 声明需要调用的微服务名称
 */
@FeignClient(name = "userservice")
public interface UserFeignClient {
    /**
     * 声明需要调用的微服务接口
     */
    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    public User findbyid(@PathVariable("id") int id);
}

2.3 在启动类上激活feign

在启动类上增加@EnableFeignClients注解:

@SpringBootApplication
@EntityScan("com.sdxb.admin.entity")
@EnableEurekaClient
@EnableFeignClients
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class,args);
    }
}

2.4 通过自动的接口调用远程微服务

修改adminController

@RestController
@RequestMapping("/admin")
public class adminController {
    @Autowired
    private UserFeignClient userFeignClient;
    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    public User getuser(@PathVariable int id){
        //使用feign远程调用
        User user= userFeignClient.findbyid(id);
        return user;
    }
}

代码很简单,首先自动注入UserFeignClient ,然后调用接口返回User,这样就不用再自己去整合url地址了。

(三)Feign的高级使用

因为feign集合了ribbon依赖和自动配置,因此我们可以用ribbon的方式去配置feign,具体的配置方法见上一篇博客,同时也可以用feign自己的方法配

请求压缩:

Feign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗:

#请求压缩
feign.compression.request.enabled=true
feign.compression.response.enabled=true 

 还可以对压缩的类型和上下限进行设置

feign.compression.request.mime-types=text/html,application/xml,application/json
feign.compression.request.min-request-size=2048

日志输出:

feign提供对日志输出的设置,在配置文件中配置以下两条数据:

feign.client.config.userservice.logger-level=FULL 
logging.level.com.sdxb.admin.Feign.UserFeignClient=debug

首先设置日志级别,使用:feign.client.config.微服务名称.logger-level=级别的方式

级别有以下四种:

NONE,不输出

BASIC,适用于生产环境问题追踪

HEADERS,在BASIC基础上增加请求和响应头信息

FULL,全部输出

接着设置需要输出哪个类的日志:logging.level.全限定类名=debug

可以看到运行后的控制台结果

附上github代码,放在version4.0分支上:github代码 

相关文章:

  • Linux 添加开机启动项的两种方法
  • SpringCloud之容错框架--Hystrix的入门和高级使用
  • IOS指纹识别调用
  • SpringCloud之微服务网关的入门与进阶(请求过滤、网关限流)
  • redis入门到精通系列(一):入门redis看这一篇就够了
  • 常用的第三方库
  • redis入门到精通系列(二):redis操作的两个实践案例
  • 给所有的td单元格绑定一个click事件
  • redis入门到精通系列(三):key的通用操作和redis内部db的通用操作
  • 正则表达式与grep详解
  • redis入门到精通系列(四):Jedis--使用java操作redis详解
  • C语言 原码--反码--补码
  • redis入门到精通系列(五):redis的持久化操作(RDB、AOF)
  • 我的学习进度条
  • redis入门到精通系列(六):redis的事务详解
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • ES6简单总结(搭配简单的讲解和小案例)
  • express如何解决request entity too large问题
  • Invalidate和postInvalidate的区别
  • JAVA并发编程--1.基础概念
  • js学习笔记
  • Laravel5.4 Queues队列学习
  • Nodejs和JavaWeb协助开发
  • PHP面试之三:MySQL数据库
  • SpringCloud集成分布式事务LCN (一)
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • vue中实现单选
  • webpack4 一点通
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 回顾 Swift 多平台移植进度 #2
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 老板让我十分钟上手nx-admin
  • 七牛云假注销小指南
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 设计模式(12)迭代器模式(讲解+应用)
  • 树莓派 - 使用须知
  • 我看到的前端
  • 主流的CSS水平和垂直居中技术大全
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​渐进式Web应用PWA的未来
  • ​用户画像从0到100的构建思路
  • # Java NIO(一)FileChannel
  • # 数论-逆元
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (10)STL算法之搜索(二) 二分查找
  • (C语言)fgets与fputs函数详解
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一) springboot详细介绍
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .net core开源商城系统源码,支持可视化布局小程序