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

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

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

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

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

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

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

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接口,如下:

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

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

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 中, 如下:

GsonCodec codec = new GsonCodec();
GitHub github = Feign.builder().encoder(new GsonEncoder()).decoder(new GsonDecoder()).target(GitHub.class, https:
复制代码

<dependency><groupId>com.netflix.feigngroupId><artifactId>feign-gsonartifactId><version>8.18.0version>
dependency>
复制代码
  • *Jackson包含了一个编码器和一个解码器,这个可以被用于JSON格式的API。

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

UserService service = Feign.builder().encoder(new JacksonEncoder()).decoder(new JacksonDecoder()).target(UserService.class, https:
复制代码

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

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

api = Feign.builder().encoder(new JAXBEncoder()).decoder(new JAXBDecoder()).target(Api.class, https:
复制代码

<dependency><groupId>com.netflix.feigngroupId><artifactId>feign-jaxbartifactId><version>8.18.0version>
dependency>
复制代码

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

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

interface GitHub {List contributors( String owner,  String repo);
}GitHub github = Feign.builder().contract(new JAXRSContract()).target(GitHub.class, https:
复制代码

<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,如下:

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

分享资源

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

http://www.lryc.cn/news/114044.html

相关文章:

  • leetcode--每日一题--822--344(使用异或来进行数据交换)
  • OpenStreetMap数据转3D场景【Python + PostgreSQL】
  • 动力节点|MyBatis入门实战到深入源码
  • 分布式规则引擎框架的设计
  • C#开发FFMPEG例子(API方式) FFmpeg推送udp组播流
  • nvm下载node导致npm报错无法使用
  • LeetCode 热题 100JavaScript--2. 两数相加
  • zookeeper总结
  • 【程序环境与预处理玩转指南】
  • 搭建简易syslog日志中转服务器
  • MongoDB文档-进阶使用-spring-boot整合使用MongoDB---MongoRepository完成增删改查
  • 什么是线程局部变量?
  • Jmeter响应中的乱码问题
  • MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找
  • CentOS下ZLMediaKit的可视化管理网站MediaServerUI使用
  • 回归预测 | MATLAB实现POA-CNN-BiGRU鹈鹕算法优化卷积双向门控循环单元多输入单输出回归预测
  • Rust 原生支持龙架构指令集
  • 为生成式AI提速,亚马逊云科技Amazon EC2 P5满足GPU需求
  • 聊聊企业数据安全那些事~
  • 日常随笔——如何把excel题库转换为word打印格式
  • SpringCloud项目打包注意事项以及可能出错的几种情况
  • ZABBIX 6.4 Mysql数据库分表
  • 多线程-Runable和Callable的区别
  • 智慧城市规划新引擎:探秘数字孪生中的二维与三维GIS技术差异
  • Python入门自学进阶-Web框架——38、redis、rabbitmq、git
  • 论 SoC上的Linux如何拉动外部I/O
  • SpringBoot项目如何部署SSL证书 (JKS格式)
  • 成功解决:ValueError Cannot assign non-leaf Tensor to parameter ‘weight‘
  • 面试之快速学习SQL-基础增删改查语句
  • nuxt脚手架创建项目