轻量级声明式的Http库——Feign的独立使用

前沿

项目中我们经常会使用HTTP工具向外部的REST接口发送请求,大家一般使用Okhttp,或者java的HttpClient发起,今天给大家介绍一款轻量级声明式的Http库(FeignClient),使用起来会使我们的项目代码更整洁,利于维护!

快速开始

Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用。 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化http调用代码的编写。 如果采用httpclient或者okhttp这样相对较重的框架,对初学者来说编码量与学习曲线都会是一个挑战,而使用spring中RestTemplate,又没有配置化的解决方案,由此想到是否可以脱离spring cloud,独立使用Feign。

引入依赖

      <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-core</artifactId>
            <version>8.18.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.netflix.feign/feign-gson -->
        <dependency>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-gson</artifactId>
            <version>8.18.0</version>
        </dependency>

定义接口

public interface OuterService {
    
    @RequestLine("GET /requesr/list?name={name}")
    @Headers("Authorization: Basic  {token}")
    String request(@Param(value = "name") String name,@Param(value = "token") String token);
}

通过@RequestLine指定HTTP请求方式及URL地址,@Param指定参数,可以在url或者header中使用{参数名}去填充请求参数。

配置类

OuterService service = Feign.builder()
            .options(new Options(1000, 3500))
            .retryer(new Retryer.Default(5000, 5000, 3))
            .target(OuterService.class, http://127.0.0.1:8085);

开始调用

service.request("test","ad12hj3bhj1b23hj1b2");

json序列化

在项目中,我们发起的Http请求往往都是json格式,feign同样提供基于json的对象转换工具,方便我们直接以对象形式交互。

接口层面指定header:

@Headers({"Content-Type: application/json","Accept: application/json"})

指定Encoder跟Decoder

## 指定Gson序列化。也可以使用Jackson序列化(引入其依赖)
OuterService service = Feign.builder()
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .options(new Options(1000, 3500))
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(OuterService.class, http://127.0.0.1:8085);

支持我们完成声明式Http接口调用

使用拦截器

在配置代理类时可以自定义拦截器

OuterService service = Feign.builder()
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
                .requestInterceptor(template -> {
                    // template 可以获取/修改body,header等信息
                })
                .options(new Options(1000, 3500))
                .retryer(new Retryer.Default(5000, 5000, 3))
                .target(OuterService.class, http://127.0.0.1:8085);

注解详解

@RequestLine("GET /messages/detail")

指定请求方式跟请求URL

    ## get请求
    @RequestLine("GET /messages/detail?msg_ids={msgIds}")
    ## post请求
    @RequestLine("POST /messages/detail?msg_ids={msgIds}")

@Param("name")

绑定参数别名,可以在RequestLine/body/headers等注解中通过{参数名}去获取值。

@Headers({"Accept:/", "Accept-Language: zh-cn"})

指定请求header

@Body("{name}")

指定请求返回body值为请求参数name

@QueryMap

只能标注在方法参数上。用于传递多个查询值,拼接在URL后面,只能标注在Map类型的参数前面,否则报错。

@HeaderMap

同上,只是用在Header上而已

以上就是轻量级声明式的Http库——Feign的使用的详细内容,更多关于Feign的使用的资料请关注我们其它相关文章!

(0)

相关推荐

  • 基于springcloud异步线程池、高并发请求feign的解决方案

    ScenTaskTestApplication.java package com.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.openfeign.EnableFeignClients; /** * @author scen *

  • SpringBoot使用Feign调用其他服务接口

    使用SpringCloud的Feign组件能够为服务间的调用节省编码时间并提高开发效率,当服务本身不复杂时可以单独将该组件拿出使用. 引入依赖 <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-openfeign --> <dependency> <groupId>org.springframework.cloud</groupId>

  • 从零开始学springboot整合feign跨服务调用的方法

    介绍 微服务横行的互联网世界, 跨服务调用显得很平凡, 我们除了采用传统的http方式接口调用, 有没有更为优雅方便的方法呢? 答案是肯定的,feign就提供了轻便的方式! 如果你的服务都注册了注册中心,比如nacos, 那么调用会显得很轻松, 只需一个注解, 带上需要调用的服务名即可,**feign + nacos**会帮你做剩余的事. 如果没有注册中心, 也无需担心, feign一样可以以传统的 ip:port 方式进行调用~ 下面,我们来实践下吧 springboot整合feign 引入依

  • 浅谈SpringCloud feign的http请求组件优化方案

    1 描述 如果我们直接使用SpringCloud Feign进行服务间调用的时候,http组件使用的是JDK的HttpURLConnection,每次请求都会新建一个连接,没有使用线程池复用.具体的可以从源码进行分析 2 源码分析 我们在分析源码很难找到入口,不知道从何开始入手,我们在分析SpringCloud feign的时候可用在配置文件下面我讲一下个人的思路. 1 首先我点击@EnableFeignClients 看一下这个注解在哪个资源路径下 如下图所示: 2 找到服务启动加载的配置文件

  • Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔断的示例

    Feign的使用 Feign也是网飞开发的,SpringCloud 使用 Feign 非常简单,我下边演示一下: 首先 服务消费者这边肯定需要一个对应的依赖: compile("org.springframework.cloud:spring-cloud-starter-openfeign") 需要启用Feign的话,也得在启动类上面加个注解 @EnableFeignClients 然后,创建一个 Feign 的接口,像这样子 package com.skypyb.sc.feign;

  • 解决Feign切换client到okhttp无法生效的坑(出现原因说明)

    提示:如果只看如何解决问题,请看文章的末尾如何解决这个问题 1. 场景描述 最近项目中使用了feign当做http请求工具来使用.相对于httpclient.resttemplate来说,fegin用起来方便很多. 然后项目有httptrace的需求,需要输出请求日志. 所以就开启了feign自己的日志,发现它自带的日志是debug级别才能打印.而且是逐行打印的,看日志非常的不方便.所以需要输出json格式的日志最好. 2.解决步骤 2.1 引入feign依赖 <dependency> <

  • SpringCloud Open feign 使用okhttp 优化详解

    我就废话不多说了,大家还是直接看代码吧~ <!--web 模块 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!--排除tomcat依赖 --> <exclusion> <artifactId&

  • SpringCloud Feign的使用简介

    简介 feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service.Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端. 在springcloud中不仅可以使用Ribbo进行负载均衡,也可以使用Feign.Feign是在Ribbon的基础上进行了一次改进,采用接口的方式实现负载均衡. 使用 导入依赖 <dependency> <groupId>org.sprin

  • 轻量级声明式的Http库——Feign的独立使用

    前沿 项目中我们经常会使用HTTP工具向外部的REST接口发送请求,大家一般使用Okhttp,或者java的HttpClient发起,今天给大家介绍一款轻量级声明式的Http库(FeignClient),使用起来会使我们的项目代码更整洁,利于维护! 快速开始 Feign是spring cloud中服务消费端的调用框架,通常与ribbon,hystrix等组合使用. 但是在某些项目中,由于遗留原因,整个系统并不是spring cloud项目,甚至不是spring项目,而使用者关注的重点仅仅是简化h

  • SpringCloud实战之Feign声明式服务调用

    在前面的文章中可以发现当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下,并且显得好傻. 那么有没有更好的解决方案呢?答案是确定的有,Netflix已经为我们提供了一个框架:Feign. Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单.Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义

  • java使用Feign实现声明式Restful风格调用

    一.Feign简介 Feign是netflix开发的声明式.模板化的http客户端,在使用时就像调用本地(服务消费者自己)的方法一般,帮助我们更加优雅的调用服务提供者的API.Feign自身支持springMVC,还整合了Eureka.Ribbon,极大的简化了Feign的使用.就整合Euraka而言,只需和普通的服务配置Eureka server的信息即可.整合Ribbon,就意味着不再需要通过标注@LoadBalanced的实例化后的RestTemplate去调用服务提供者方法了.Feign

  • SpringCloud之Feign代理,声明式服务调用方式

    目录 引入相关依赖然后再主入口启用注解 引入相关依赖然后再主入口启用注解:@Enabl Feign配合Ribbon.Hystrix的超时策略配置如下 1.pom 2.主入口 3.配置文件 4.业务代码与实现 5.controller测试 将其他微服务中的服务接口,用feign在本项目中进行调用. Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口并用注解来配置它既可完成对Web服务接口

  • SpringCloud超详细讲解Feign声明式服务调用

    目录 入门案例 @FeignClient注解详解 Feign Client的配置 Feign请求添加headers 负载均衡 (Ribbon) 容错机制 Hystrix支持 Sentinel支持 Feign开启容错机制支持后的使用方式 请求压缩feign.compression 日志级别 入门案例 在服务消费者导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>

  • Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作示例

    本文实例讲述了Spring实战之使用TransactionProxyFactoryBean实现声明式事务操作.分享给大家供大家参考,具体如下: 一 配置文件 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.

  • Spring实战之使用XML方式管理声明式事务操作示例

    本文实例讲述了Spring实战之使用XML方式管理声明式事务操作.分享给大家供大家参考,具体如下: 一 配置文件 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"

  • Spring实战之使用注解实现声明式事务操作示例

    本文实例讲述了Spring实战之使用注解实现声明式事务操作.分享给大家供大家参考,具体如下: 一 配置文件 <?xml version="1.0" encoding="GBK"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xm

  • Compose声明式代码语法对比React Flutter SwiftUI

    目录 前言 1.Stateless 组件 2.Stateful 组件 3. 控制流语句 4. 生命周期 5. 装饰/样式 总结 前言 Comopse 与 React.Flutter.SwiftUI 同属声明式 UI 框架,有着相同的设计理念和相似的实现原理,但是 Compose 的 API 设计要更加简洁. 本文就这几个框架在代码上做一个对比,感受一下 Compose 超高的代码效率. 1.Stateless 组件 声明式 UI 的基本特点是基于可复用的组件来构建视图,声明式 UI 的开发过程本

  • SpringBoot 3.0 新特性内置声明式HTTP客户端实例详解

    目录 http interface 什么是声明式客户端 测试使用 1. maven 依赖 2. 创建 Http interface 类型 3. 注入声明式客户端 4. 单元测试调用 http interface http interface 从 Spring 6 和 Spring Boot 3 开始,Spring 框架支持将远程 HTTP 服务代理成带有特定注解的 Java http interface.类似的库,如 OpenFeign 和 Retrofit 仍然可以使用,但 http inte

随机推荐