zoukankan      html  css  js  c++  java
  • SpringCloud Feign

    ⒈Feign是什么?

      Feign是Netflix开发的声明式、模板化的HTTP客户端, Feign可以帮助我们更快捷、优雅地调用HTTP API。

      SpringCloud微服务项目之间调用是通过Rest请求来进行服务调用的,之前我们用到RestTemplate来进行服务请求,Spring通过Feign将RestTemplate封装成了可声明式的web客户端,使得编写web客户端更加简单。

      在Spring Cloud中,使用Feign非常简单——创建一个接口,并在接口上添加一些注解,代码就完成了。Spring Cloud对Feign进行了增强,使Feign支持了Spring MVC注解和HttpmessageConverters、Feign注解或者JAX-RS注解等。Feign还支持可插拔的编码器和解码器,SpringCloud还对Feign集成了注册中心(Eureka)和客户端负载均衡(Ribbon),使得我们拥有一个客户端负载均衡的web请求客户端。

    ⒉示例

      ①在服务消费者项目工程中添加Feign依赖  

     1         <dependency>
     2             <groupId>org.springframework.boot</groupId>
     3             <artifactId>spring-boot-starter-web</artifactId>
     4         </dependency>
     5         <dependency>
     6             <groupId>org.springframework.cloud</groupId>
     7             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
     8         </dependency>
     9         <dependency>
    10             <groupId>org.springframework.cloud</groupId>
    11             <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    12         </dependency>
    13         <dependency>
    14             <groupId>org.springframework.cloud</groupId>
    15             <artifactId>spring-cloud-starter-openfeign</artifactId>
    16         </dependency>

      ②创建一个Feign接口,并添加@FeignClient注解

     1 package cn.coreqi.feign;
     2 
     3 import cn.coreqi.entities.User;
     4 import org.springframework.cloud.openfeign.FeignClient;
     5 import org.springframework.web.bind.annotation.GetMapping;
     6 import java.util.List;
     7 
     8 @FeignClient(value = "USER-PROVIDER")   //指定微服务实例名称
     9 public interface UserFeignClient {
    10     @GetMapping("/users")   //指定调用微服务的服务地址
    11     public List<User> getList();
    12 }

      ③修改Controller代码,让其调用Feign接口

      

     1 package cn.coreqi.controller;
     2 
     3 import cn.coreqi.entities.User;
     4 import cn.coreqi.feign.UserFeignClient;
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.web.bind.annotation.GetMapping;
     7 import org.springframework.web.bind.annotation.RestController;
     8 import org.springframework.web.client.RestOperations;
     9 import java.util.List;
    10 
    11 @RestController
    12 public class UserController {
    13     @Autowired
    14     private RestOperations restTemplate;
    15 
    16     @Autowired
    17     private UserFeignClient userFeignClient;
    18 
    19     @GetMapping("/userno1")
    20     public User getUsersFirst(){
    21         User[] users = restTemplate.getForObject("http://user-provider/users",User[].class);
    22         return users[0];
    23     }
    24 
    25     @GetMapping("/userno2")
    26     public User getUsersFirst1(){
    27         List<User> users = userFeignClient.getList();
    28         return users.get(0);
    29     }
    30 }

      ④修改主程序启动类,为其添加@EnableFeignClients注解

      

     1 package cn.coreqi;
     2 
     3 import org.springframework.boot.SpringApplication;
     4 import org.springframework.boot.autoconfigure.SpringBootApplication;
     5 import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
     6 import org.springframework.cloud.client.loadbalancer.LoadBalanced;
     7 import org.springframework.cloud.openfeign.EnableFeignClients;
     8 import org.springframework.context.annotation.Bean;
     9 import org.springframework.web.client.RestOperations;
    10 import org.springframework.web.client.RestTemplate;
    11 
    12 @SpringBootApplication
    13 @EnableDiscoveryClient  //开启服务发现功能
    14 @EnableFeignClients(basePackages = {"cn.coreqi"})
    15 public class SpringbootcloudserviceconsumerApplication {
    16 
    17     public static void main(String[] args) {
    18         SpringApplication.run(SpringbootcloudserviceconsumerApplication.class, args);
    19     }
    20 
    21     @Bean
    22     @LoadBalanced   //使用负载均衡机制
    23     public RestOperations restTemplate(){
    24         return new RestTemplate();
    25     }
    26 
    27 }

    ⒊总结

      其实通过Feign封装了HTTP调用服务方法,使得客户端像调用本地方法那样直接调用方法,类似Dubbo中暴露远程服务的方式,区别在于Dubbo是基于私有二进制协议,而Feign本质上还是个HTTP客户端。

      

  • 相关阅读:
    cad是什么意思?教你快速把cad转换成pdf格式
    为什么街上的商贩更喜欢用微信支付,而不是支付宝,看完长知识了
    音乐剪辑软件怎么用?教你一个快速编辑音频的方法
    电脑如何录制视频?安利两种电脑录屏的方法
    被称为逆天改命的5大中国工程,曾轰动世界,你知道几个?
    如何使用音乐格式转换器?快速编辑音频文件的方法
    PPT结尾只会说“谢谢”?学会这些PPT结尾,观众主动为你鼓掌
    经典PHP面试题(冒泡排序),当场就被打脸,卧槽什么冒泡?为啥还排序?
    千万不要再搞混了,函数empty( var );输出的判断值是false : true
    PHP删除数组中空数组
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10479806.html
Copyright © 2011-2022 走看看