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

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

时间:2023-08-09 12:33:16浏览次数:36  
标签:代码 Feign 原生态 Fegin builder RPC 复制 new class

推荐超值课程:点击获取

  • 你可以使用 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");
复制代码

分享资源

资源分享
扫码关注发送:资源 获取以上资源
字节技术

标签:代码,Feign,原生态,Fegin,builder,RPC,复制,new,class
From: https://www.cnblogs.com/3shu/p/17616554.html

相关文章

  • gRPC Test
    目录简单使用ghzgithub:https://github.com/bojand/ghzghz官方文档:https://ghz.sh/简单使用下载后解压,将目录配置到path上,方便命令调用:ghz--insecure--protoxxx\Hello.proto--callpackage_name.service_name.rpc_method_name-d"{\"name\":\"a\"}"localho......
  • 如何通过gRPC传输文件
    在gRPC中,可以通过将文件分割成多个小块,然后使用流式RPC将这些小块发送到服务器来传输文件。以下是一个简单的示例,展示了如何在gRPC中实现文件传输。首先,我们需要定义一个服务来处理文件传输。在.proto文件中,我们可以定义一个UploadFile服务,它接收一个流式的Chunk消息,并返回一个Up......
  • gRPC的测试
    gRPC(Googleremoteprocedurecall)远程过程调用,使不同服务在不同机器上互相调用就像调本地一样方便但调用方和服务方对应开发不是一个人,出现问题,没法确认是哪方的问题,因此,可以使用BloomRPC工具测试rpc服务是否正常 1、测试工具:BloomRPC,下载地址 https://github.com/uw-labs/......
  • Python中实现远程调用(RPC、RMI)简单例子
    远程调用使得调用远程服务器的对象、方法的方式就和调用本地对象、方法的方式差不多,因为我们通过网络编程把这些都隐藏起来了。远程调用是分布式系统的基础。远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI)。RPCRPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有......
  • docker 中使用 pywpsrpc
    一般如果使用带桌面环境的docker,比如dorowu/ubuntu-desktop-lxde-vnc,然后安装wps后,使用https://github.com/timxx/pywpsrpc是没啥问题的,需要注意的是wps第一次打开后,需要同意EULA,然后按照https://github.com/timxx/pywpsrpc/issues/44#issuecomment-1032304847中提到的......
  • CENTOS7下安装GRPC FOR CPP
    gRPC是一个高性能、开源和通用的RPC框架,面向移动和HTTP/2设计。目前提供C、Java和Go语言版本,分别是:grpc,grpc-java,grpc-go.其中C版本支持C,C++,Node.js,Python,Ruby,Objective-C,PHP和C#。gRPC基于HTTP/2标准设计,带来诸如双向流、流控、头部压缩、单TC......
  • Golang gRPC学习(05): retry重试
    什么是重试如果服务出现了错误,主要是网络,服务器出现了短暂异常的时候,该怎么办?我们都会人工或者自动的重新连接服务试试,看服务是否恢复可用了。这种重新进行连接服务的一种方式就是重试。如果是在微服务里,应该属于微服务治理的范畴。重试是处理网络服务出现暂时不可用的一种方......
  • API架构的选择,RESTful、GraphQL还是gRPC
    API架构的选择,RESTful、GraphQL还是gRPC hi,我是熵减,见字如面。在现代的软件工程中,微服务或在客户端与服务端之间的信息传递的方式,比较常见的有三种架构设计的风格:RESTful、GraphQL和gRPC。每一种模式,都有其特点和合适的使用场景,今天,我们主要来对三种风格做一个深入的理解......
  • .NET 7 使用gRpc
    Server端 添加proto文件,编辑项目文件添加proto文件,编译项目 添加Service服务 启动Server Client端安装package Copy proto文件到项目里   ......
  • 新书上市 | 6岁的gRPC,终于出书了!
    gRPC是由谷歌开源的高性能远程过程调用框架。再过十几天,它就满6岁了。虽然gRPC的采用率正呈指数级增长,但中文领域一直没有一本综合介绍该技术的实体书。现在,这种尴尬局面终于被打破了!新书上市卡山·因德拉西里丹尼什·库鲁普著张卫滨译在介绍这本书之前,我们先来聊聊gRPC是怎......