第一个Feign程序(本章内容Feign没有做集成,只…

2018-10-23 03:05:28来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

第一个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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Memcached 分布式内存对象缓存系统在Java Web项目收藏栏中的使用

下一篇:JAVA 注解