谈谈feign

  • 时间:2019-06-11 04:33 作者:山东大葱哥 来源:山东大葱哥 阅读:594
  • 扫一扫,手机访问
摘要:Feign的前世今生Feign是什么? Feign是一个Java 的HTTP Client 组件 作用: 简化HTTP API的复杂度Feign的工作机制解决注解解析参数构造http请求模板发送请求解析响应数据什么场景下使用Feign? 涉及到http调用的地方都可以考虑使用feign 例如

Feign的前世今生

Feign是什么?

- Feign是一个Java 的HTTP Client 组件- 作用: 简化HTTP API的复杂度

Feign的工作机制

  1. 解决注解
  2. 解析参数
  3. 构造http请求模板
  4. 发送请求
  5. 解析响应数据

什么场景下使用Feign?

- 涉及到http调用的地方都可以考虑使用feign- 例如调用第三方http接口,支付接口- 例如爬虫项目等   

dubbo中能否需要feign?为什么?

 - dubbo框架本身不需要feign - dubbo中的微服务使用dubbo私有协议,不是http协议,所以不能使用feign

Spring Cloud Feign 是什么

- Spring全家桶把openfeign整合进来,形成了spring cloud feign - 添加了对SpringMVC注解的支持- 集成对eureka、zuul、Hystrix的支持

原生Feign案例实战

需求

  1. 访问 https://api.github.com/repos/OpenFeign/feign/contributors
  2. 获取贡献者信息,包括登录名、贡献量。

引入pom文件

        <dependency>            <groupId>io.github.openfeign</groupId>            <artifactId>feign-core</artifactId>            <version> 10.2.3</version>        </dependency>        <dependency>            <groupId>io.github.openfeign</groupId>            <artifactId>feign-gson</artifactId>            <version> 10.2.3</version>        </dependency>

编写基础代码

  1. 编写dto
public class Contribution {    String login;    int contributions;    public String getLogin() {        return login;    }    public void setLogin(String login) {        this.login = login;    }    public int getContributions() {        return contributions;    }    public void setContributions(int contributions) {        this.contributions = contributions;    }}
  1. 开发接口
public interface GithubService {    List<Contribution> getContributions();}
  1. main程序中调用
public class App {    public static void main(String[] args) {        GithubService service;        List<Contribution> list = service.getContributions();        for (Contribution contribution : list) {            System.out.println(contribution.getLogin() + "    ("                    + contribution.getContributions() + ")");        }    }}

添加Feign支持

  1. 接口中添加Feign注解
    @RequestLine("GET")    List<Contribution> getContributions();
  1. main程序中通过Feign调用接口
      GithubService service=Feign.builder().decoder(            new GsonDecoder()).target(GithubService.class,                           "https://api.github.com/repos/OpenFeign/feign/contributors")

扩展需求

  • 在url中添加参数支持,可以任意指定owner 和 repo,获取对应的贡献者信息
  • 获取 alibaba/nacos 的贡献者信息

代码实现

  1. 修改接口代码
      @RequestLine("GET /repos/{owner}/{repo}/contributors")          List<Contribution> getContributions(@Param("owner") String owner                  , @Param("repo") String repo);
  1. 修改main程序
    service.getContributions("alibaba","nacos");
  • 全部评论(0)
最新发布的资讯信息
【系统环境|】【Azure API Management】实目前API Management服务中使用MI(管理标识 Managed Identity)访问启用防火墙的Storage Account(2025-10-16 23:53)
【系统环境|】【Azure 存储服务】App Service 访问开启防火墙的存储账号时遇见 403 (This request is not authorized to perform this opera...(2025-10-16 23:52)
【系统环境|】YouTube账号购买全攻略|点击查看原文购买|购买YouTube账号、油管号自动发货服务的优势与缺点 附:YouTube无法加载?可能是这个设置在作怪!(2025-10-16 23:52)
【系统环境|】【Azure Developer】Azure Automation 自动化账号生成的时候怎么生成连接 与证书 (Connection & Certificate)(2025-10-16 23:41)
【系统环境|】【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置(2025-10-16 23:40)
【系统环境|】近日,四川宜宾,某地下停车场内的监控拍到了一幕惊险的画面。危险!一汽车修理师傅正在修理一辆3吨重的悍马时,悍马车突然自己启动,眼看就要撞向前面的一辆灰色轿车了,一侧的修理师傅做出了一个令人始料不...(2025-10-16 23:38)
【系统环境|】iOS 能耗监控与电池优化实战:如何查看App耗电量、分析CPU、GPU内存使用、(uni-app iOS开发性能调试指南)(2025-10-16 23:37)
【系统环境|】《风流女管家》法国犯罪悬疑片--《风流女管家》法语高清全集免费在线无广告完整观看---《风流女管家》HD正版免费播放-手机电脑皆可看(2025-10-16 23:36)
【系统环境|】2025含金量排名前十计算机专业证书(2025-10-15 20:51)
【系统环境|】你有白帽众测 我有黑帽雇佣(2025-10-15 20:50)
手机二维码手机访问领取大礼包
返回顶部