SpringCloud Feign的使用简介

 更新时间:2021年04月16日 10:36:44   作者:遇见_line  
这篇文章主要介绍了SpringCloud Feign的使用简介,帮助大家更好的理解和学习使用SpringCloud,感兴趣的朋友可以了解下

简介

feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。

在springcloud中不仅可以使用Ribbo进行负载均衡,也可以使用Feign。Feign是在Ribbon的基础上进行了一次改进,采用接口的方式实现负载均衡。

使用

  • 导入依赖
<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
  • 编写对应的接口

@FeignClient(value = "PROVIDER-NAME")声明这是一个FeignClient,value指明需要的服务id

@FeignClient(value = "PROVIDER-NAME")
public interface DeptClientService {
// 请求的路径需与服务提供者的路径一致
    @RequestMapping(value = "/dev/add")
    boolean add(Dept dept);

    @RequestMapping(value = "/dev/{id}")
    Dept queryByID(@PathVariable("id") Long id );

    @PostMapping(value = "/dev/list")
    List<Dept> queryAll();
}

  • 修改Controller

我们不再使用RestTemplate来获取所需的对象,而是通过之前定义的接口来获取

@RestController
public class ConsumerController {
    @Autowired
    private DeptClientService service;
    @RequestMapping("/consumer/get/{id}")
    public Dept getByID(@PathVariable("id") Long id){
        return this.service.queryByID(id);
    }
    @RequestMapping("/consumer/add")
    public boolean add(String dname){
        Dept dept = new Dept();
        dept.setDname(dname);
        return this.service.add(dept);
    }
    @RequestMapping("/consumer/list")
    public List<Dept> list(){
        return this.service.queryAll();
    }

}
  • 修改启动类

@EnableFeignClients 开启Feign负载均衡

@SpringBootApplication(scanBasePackages = "com")
@EnableEurekaClient
@EnableFeignClients(basePackages = "com.service")
public class FeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(FeignApplication.class,args);
    }
}

  • 对比:

Ribbon

public class ConsumerController {
    @Autowired
    private RestTemplate template;
    private static final String url="http://PROVIDER-NAME";
    @RequestMapping("/consumer/get/{id}")
    public Dept getByID(@PathVariable long id){
                                                //请求的路径,返回的对象
        Dept getEntity = template.getForObject(url + "/dev/" + id, Dept.class);
        return getEntity;
    }
    @RequestMapping("/consumer/add")
    public boolean add(String dname){
        Dept dept = new Dept();
        dept.setDname(dname);
        System.out.println(dept);
        //请求的路径,传递的参数,返回的对象
        return template.postForObject(url+ "/dev/add",dept,Boolean.class);
    }
    @RequestMapping("/consumer/list")
    public List<Dept> list(){
        //请求的路径,返回的对象
        return template.postForObject(url+"/dev/list",void.class,List.class);
    }

}

Feign

@RestController
public class ConsumerController {
    @Autowired
    private DeptClientService service;
    @RequestMapping("/consumer/get/{id}")
    public Dept getByID(@PathVariable("id") Long id){
        return this.service.queryByID(id);
    }
    @RequestMapping("/consumer/add")
    public boolean add(String dname){
        Dept dept = new Dept();
        dept.setDname(dname);
        return this.service.add(dept);
    }
    @RequestMapping("/consumer/list")
    public List<Dept> list(){
        return this.service.queryAll();
    }

}

总结

Feign的使用与Ribbon不同的地方在于

  1. Feign通过接口来实现,更符合我们的面向接口编程的习惯
  2. 在Ribbon的Controller中我们需要将url拼接,而Feign帮我们进行了拼接

以上就是SpringCloud Feign的使用简介的详细内容,更多关于SpringCloud Feign的资料请关注脚本之家其它相关文章!

相关文章

  • 深入理解Mybatis一级缓存

    深入理解Mybatis一级缓存

    客户端向数据库服务器发送同样的sql查询语句,如果每次都去访问数据库,会导致性能的降低,那么怎么提高呢?下面小编给大家分享下mybatis为我们提供了一级缓存的策略
    2016-12-12
  • Java多线程实现Runnable方式

    Java多线程实现Runnable方式

    这篇文章主要为大家详细介绍了Java多线程如何实现Runnable方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • Java数据结构之栈的基本定义与实现方法示例

    Java数据结构之栈的基本定义与实现方法示例

    这篇文章主要介绍了Java数据结构之栈的基本定义与实现方法,简单描述了数据结构中栈的功能、原理,并结合java实例形式分析了栈的基本定义与使用方法,需要的朋友可以参考下
    2017-10-10
  • Java中instanceof关键字实例讲解

    Java中instanceof关键字实例讲解

    大家好,本篇文章主要讲的是Java中instanceof关键字实例讲解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • Java:详解Java中的异常

    Java:详解Java中的异常

    这篇文章主要介绍了java中的异常,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • Java实现远程控制技术完整源代码分享

    Java实现远程控制技术完整源代码分享

    这篇文章主要为大家详细介绍了Java实现远程控制技术完整源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • SpringBoot中Druid连接池与多数据源切换的方法

    SpringBoot中Druid连接池与多数据源切换的方法

    微服务架构中多数据源切换是个常见的需求,Spring Boot 提供了强大的支持来简化这一过程.本文给大家介绍了SpringBoot中Druid连接池与多数据源切换的方法,需要的朋友可以参考下
    2024-11-11
  • java实现砸金蛋抽奖功能

    java实现砸金蛋抽奖功能

    这篇文章主要为大家详细介绍了java实现砸金蛋抽奖功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Java代理模式的示例详解

    Java代理模式的示例详解

    代理模式(Proxy Parttern)为一个对象提供一个替身,来控制这个对象的访问,即通过代理对象来访问目标对象。本文将通过示例详细讲解一下这个模式,需要的可以参考一下
    2022-02-02
  • java与微信小程序实现websocket长连接

    java与微信小程序实现websocket长连接

    这篇文章主要为大家详细介绍了java与微信小程序实现websocket长连接,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05

最新评论