经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
第一个Feign程序(本章内容Feign没有做集成,只是单独使用)
来源:cnblogs  作者:沛昕的博客  时间:2018/10/23 9:28:52  对本文有异议

第一个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

  1. <dependencies>
  2. <!-- CXF -->
  3. <dependency>
  4. <groupId>org.apache.cxf</groupId>
  5. <artifactId>cxf-core</artifactId>
  6. <version>3.1.0</version>
  7. </dependency>
  8. <dependency>
  9. <groupId>org.apache.cxf</groupId>
  10. <artifactId>cxf-rt-rs-client</artifactId>
  11. <version>3.1.0</version>
  12. </dependency>
  13.  
  14. <!-- Feign -->
  15. <dependency>
  16. <groupId>io.github.openfeign</groupId>
  17. <artifactId>feign-core</artifactId>
  18. <version>9.5.0</version>
  19. </dependency>
  20. <dependency>
  21. <groupId>io.github.openfeign</groupId>
  22. <artifactId>feign-gson</artifactId>
  23. <version>9.5.0</version>
  24. </dependency>
  25. </dependencies>

下面我们编写一个CXF客户端,进行测试:CxfClient.java

  1. public class CxfClient {
  2. public static void main(String[] args) throws IOException {
  3. // 创建 WebClient
  4. WebClient client = WebClient.create("http://localhost:9090/getPoliceById/123");
  5. // 获取响应
  6. Response response = client.get();
  7. // 获取响应内容
  8. InputStream is = (InputStream) response.getEntity();
  9. String content = IOUtils.readStringFromStream(is);
  10. // 打印结果
  11. System.out.println("请求结果:" + content);
  12. }
  13. }

乱码的问题不用管,我们就看 WebClient.create 方法中的url,url多的话,维护起来也麻烦。。。接下来,我们编写一个Feign程序,与CXF进行一下对比

 

 在文章的一开始,提到了 Feign 程序会更加的面向对象,所以我们先创建一个实体类,用来接收结果对象:Police.java

  1. public class Police {
  2. private String id;// 警察编号,用来保存用户输入的参数
  3. private String url;// 处理请求的服务器url
  4. private String message;// 提示信息
  5. public String getId() {
  6. return id;
  7. }
  8. public void setId(String id) {
  9. this.id = id;
  10. }
  11. public String getUrl() {
  12. return url;
  13. }
  14. public void setUrl(String url) {
  15. this.url = url;
  16. }
  17. public String getMessage() {
  18. return message;
  19. }
  20. public void setMessage(String message) {
  21. this.message = message;
  22. }
  23. }

 其次,我们创建一个接口类:FeignService.java

  1. public interface FeignService {
  2. @RequestLine("GET /getPolice")
  3. public String getPolice();
  4. @RequestLine("GET /getPolice")
  5. public Police getPoliceObj();
  6. @RequestLine("GET /getPoliceById/{id}")
  7. public String getPoliceById(@Param("id") String id);
  8. }

 最后,我们再创建一个测试类,查看结果:TestMain.java

  1. public class TestMain {
  2. public static void main(String[] args) {
  3. // 返回字符串
  4. FeignService client = Feign.builder().target(FeignService.class, "http://localhost:9090");
  5. String policeStr = client.getPolice();
  6. System.out.println("===== 直接返回:"+policeStr);
  7. String policeByIdStr = client.getPoliceById("123");
  8. System.out.println("===== 根据id返回:"+policeByIdStr);
  9. // 返回对象
  10. FeignService client2 = Feign.builder().
  11. decoder(new GsonDecoder()).// 解码器
  12. target(FeignService.class, "http://localhost:9090");
  13. Police police = client2.getPoliceObj();
  14. System.out.println("===== 请求结果返回对象:");
  15. System.out.println("id:"+police.getId());
  16. System.out.println("url:"+police.getUrl());
  17. System.out.println("message:"+police.getMessage());
  18. }
  19. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号