第一个Feign程序(本章内容Feign没有做集成,只…
2018-10-23 03:05:28来源:博客园 阅读 ()
第一个Feign程序
1. Feign被集成到SpringCloud Netflix模块,当Eureka,Ribbon集成的时候呢,Feign就具备了负载均衡的功能。Feign本身使用就很简便,再加上与SpringCloud的整合,将很大程度上降低我们开发的工作量。
2. 它是Github上面的一个开源项目,目的是为了简化WebService客户端的开发,在使用Feign的时候 可以使用注解来修饰接口,被修饰的接口就具有了访问webservice的能力,这些注解呢 可以使用Feign的自带注解,也可以支持使用第三方的注解。Feign还支持插件式的编码器和解码器,使用者可以通过这些特性,对请求和响应进行封装和解析。
Feign会更加的面向对象,下面我们使用Feign来对比一下CXF。在这之前我们需要准备对外提供接口。
如果没有接口等项目的朋友,可以参照前几章的“SpringCloud 中使用 Ribbon(默认轮询规则 + 自定义规则)”搭建(只搭建服务器与服务提供者即可)
这里我们一次把依赖CXF、Feign的依赖全部引入:pom.xml
<dependencies> <!-- CXF --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-client</artifactId> <version>3.1.0</version> </dependency> <!-- Feign --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId> <version>9.5.0</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-gson</artifactId> <version>9.5.0</version> </dependency> </dependencies>
下面我们编写一个CXF客户端,进行测试:CxfClient.java
public class CxfClient { public static void main(String[] args) throws IOException { // 创建 WebClient WebClient client = WebClient.create("http://localhost:9090/getPoliceById/123"); // 获取响应 Response response = client.get(); // 获取响应内容 InputStream is = (InputStream) response.getEntity(); String content = IOUtils.readStringFromStream(is); // 打印结果 System.out.println("请求结果:" + content); } }
乱码的问题不用管,我们就看 WebClient.create 方法中的url,url多的话,维护起来也麻烦。。。接下来,我们编写一个Feign程序,与CXF进行一下对比
在文章的一开始,提到了 Feign 程序会更加的面向对象,所以我们先创建一个实体类,用来接收结果对象:Police.java
public class Police { private String id;// 警察编号,用来保存用户输入的参数 private String url;// 处理请求的服务器url private String message;// 提示信息 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
其次,我们创建一个接口类:FeignService.java
public interface FeignService { @RequestLine("GET /getPolice") public String getPolice(); @RequestLine("GET /getPolice") public Police getPoliceObj(); @RequestLine("GET /getPoliceById/{id}") public String getPoliceById(@Param("id") String id); }
最后,我们再创建一个测试类,查看结果:TestMain.java
public class TestMain { public static void main(String[] args) { // 返回字符串 FeignService client = Feign.builder().target(FeignService.class, "http://localhost:9090"); String policeStr = client.getPolice(); System.out.println("===== 直接返回:"+policeStr); String policeByIdStr = client.getPoliceById("123"); System.out.println("===== 根据id返回:"+policeByIdStr); // 返回对象 FeignService client2 = Feign.builder(). decoder(new GsonDecoder()).// 解码器 target(FeignService.class, "http://localhost:9090"); Police police = client2.getPoliceObj(); System.out.println("===== 请求结果返回对象:"); System.out.println("id:"+police.getId()); System.out.println("url:"+police.getUrl()); System.out.println("message:"+police.getMessage()); } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 通过与C++程序对比,彻底搞清楚JAVA的对象拷贝 2020-06-11
- 5月到6月程序员到底经历了和什么,工资狂跌***元,你是否也 2020-06-10
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-09
- 一个程序员的水平能差到什么程度?看到他我明白了! 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash