【Fegin技术专题】「原生态」打开Fegin之RPC技术的开端,你会使用原生态的Fegin吗?(中)

  • 你可以使用 Jersey 和 CXF 这些来写一个 Rest 或 SOAP 服务的java客服端。

  • 你也可以直接使用 Apache HttpClient 来实现。但是 Feign 的目的是尽量的减少资源和代码来实现和 HTTP API 的连接

  • *通过自定义的编码解码器以及错误处理,你可以编写任何基于文本的 HTTP API。

  • Feign通过注解注入一个模板化请求进行工作。只需在发送之前关闭它,参数就可以被直接的运用到模板中。

  • *然而这也限制了Feign,只支持文本形式的API,它在响应请求等方面极大的简化了系统。

java 复制代码
interface UserService {

	 List getUserList( String userName,  int age);
}

static class User {
 String userName;
 int age;
}

public static void main(String... args) {
 User user = Feign.builder()
            .decoder(new GsonDecoder())
            .target(UserService.class, "https://api.github.com");

 List userList = github.getUserList("libo", 12);
 for (User user : userList) {
   System.out.println(user.userName + " (" + user.age + ")");
 }
}
复制代码

Feign 有许多可以自定义的方面。举个简单的例子,你可以使用 Feign.builder() 来构造一个拥有你自己组件的API接口,如下:

java 复制代码
interface Bank {

 Account getAccountInfo( String id);
}
复制代码

// AccountDecoder() 是自己实现的一个Decoder

java 复制代码
Bank bank = Feign.builder().decoder(new AccountDecoder()).target(Bank.class, https:
复制代码

举个例子,下面的这个模式允许使用当前url和身份验证token来装饰每个发往身份验证中心服务的请求。

CloudDNS cloudDNS = Feign.builder().target(new CloudIdentityTarget(user, apiKey));

Feign 包含了 GitHub 和 Wikipedia 客户端的实现样例.相似的项目也同样在实践中运用了Feign。尤其是它的示例后台程序。

Feign 可以和其他的开源工具集成工作。你可以将这些开源工具集成到 Feign 中来。目前已经有的一些模块如下:

  • *Gson包含了一个编码器和一个解码器,这个可以被用于JSON格式的API。

添加 GsonEncoder 以及 GsonDecoder到你的 Feign.Builder 中, 如下:

java 复制代码
GsonCodec codec = new GsonCodec();
GitHub github = Feign.builder()
           .encoder(new GsonEncoder())
           .decoder(new GsonDecoder())
           .target(GitHub.class, https:
复制代码
xml 复制代码
<dependency>
  <groupId>com.netflix.feigngroupId>
  <artifactId>feign-gsonartifactId>
  <version>8.18.0version>
dependency>
复制代码
  • *Jackson包含了一个编码器和一个解码器,这个可以被用于JSON格式的API。

添加 JacksonEncoder 以及 JacksonDecoder到你的Feign.Builder 中, 如下:

java 复制代码
UserService service = Feign.builder()
           .encoder(new JacksonEncoder())
           .decoder(new JacksonDecoder())
           .target(UserService.class, https:
复制代码
xml 复制代码
<dependency>
  <groupId>com.netflix.feigngroupId>
  <artifactId>feign-jacksonartifactId>
  <version>8.18.0version>
dependency>
复制代码
  • SaxDecoder 用于解析XML,并兼容普通JVM和Android。下面是一个配置SAX来解析响应的例子:
java 复制代码
api = Feign.builder().decoder(SAXDecoder.builder()
.registerContentHandler(UserIdHandler.class)
.build())
.target(Api.class, https:
复制代码
xml 复制代码
<dependency>
  <groupId>com.netflix.feigngroupId>
  <artifactId>feign-saxartifactId>
  <version>8.18.0version>
dependency>
复制代码
  • JAXB包含了一个编码器和一个解码器,这个可以被用于XML格式的API。

添加 JAXBEncoder 以及 JAXBDecoder 到你的 Feign.Builder 中, 如下:

java 复制代码
api = Feign.builder()
      .encoder(new JAXBEncoder())
      .decoder(new JAXBDecoder())
      .target(Api.class, https:
复制代码
xml 复制代码
<dependency>
  <groupId>com.netflix.feigngroupId>
  <artifactId>feign-jaxbartifactId>
  <version>8.18.0version>
dependency>
复制代码

JAXRSContract 使用 JAX-RS规范重写覆盖了默认的注解处理。

下面是一个使用 JAX-RS 的例子:

java 复制代码
interface GitHub {

 List contributors( String owner,  String repo);
}

GitHub github = Feign.builder()
           .contract(new JAXRSContract())
           .target(GitHub.class, https:
复制代码
xml 复制代码
<dependency>
  <groupId>com.netflix.feigngroupId>
  <artifactId>feign-jaxrsartifactId>
  <version>8.18.0version>
dependency>
复制代码

OkHttpClient使用OkHttp来发送Feign的请求,OkHttp支持SPDY (SPDY是Google开发的基于TCP的传输层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验),并有更好的控制http请求。

要让 Feign 使用 OkHttp ,你需要将 OkHttp 加入到你的环境变量中区,然后配置 Feign 使用 OkHttpClient,如下:

java 复制代码
GitHub github = Feign.builder()
           .client(new OkHttpClient())
           .target(GitHub.class, "https://api.github.com");
复制代码
java 复制代码

分享资源


获取以上资源请访问开源项目 点击跳转

相关推荐
星恒讯工业路由器20 分钟前
工业无线通信选型常见问题解答
网络·信息与通信·无线ap·设备选型·工业无线通信·防爆无线设备·4g/5g路由器
智慧光迅AINOPOL33 分钟前
校园全光网建设成本对比:全光网取代传统校园网建设成本分析
网络·全光网解决方案·全光网·校园全光网·校园全光网解决方案
2401_873479401 小时前
如何识别代理IP和伪装流量?用IP情报工具三步穿透住宅代理伪装
网络·数据库·网络协议·tcp/ip·ip
s09071361 小时前
深入解析 Sensor Hub Transport Protocol (SHTP) 协议
网络·协议·传感器·shtp
STDD1 小时前
Traefik 中间件深度配置:限流、认证、IP 白名单与错误页面定制
网络协议·tcp/ip·中间件
hey you~1 小时前
400电话选型技术测评:一个开发视角的线路质量评估方案
运维·网络·数据库·400电话·企业通信
曾令胜2 小时前
HTTP协议基础总结
网络·网络协议·http
hj2862513 小时前
Docker 核心知识点整理(网络 + Dockerfile + 原理 + 命令)
网络·docker·容器
so~what3 小时前
NTN全局控制器集中管理的优势
网络·ntn
normanhere3 小时前
华为S5735堆叠配置加华为AC S9700-S主备配置案例
网络