zoukankan      html  css  js  c++  java
  • SpringCloud之远程调用OpenFeign和Ribbon

    Ribbon、Feign和OpenFeign的区别   

    SpringCloudAlibaba微服务实战教程系列                                                                          

    Spring Cloud 微服务架构学习记录与示例                                               

    一 简介

    Feign是Netflflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的),是以Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装HTTP请求报⽂的⽅式直接调⽤,Feign被⼴泛应⽤在Spring Cloud 的解决⽅案中。类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。
    • Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后呢调⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常简单,创建⼀个接⼝(在消费者--服务调⽤⽅这⼀端),并在接⼝上添加⼀些注解,代码就完成了
    • SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解(OpenFeign)

    本质:封装了Http调⽤流程,更符合⾯向接⼝化的编程习惯,类似于Dubbo的服务调⽤

    Dubbo的调⽤⽅式其实就是很好的⾯向接⼝编程

    二、配置应用

    (效果)Feign = RestTemplate+Ribbon+Hystrix

    1、引入pom

    <dependency> 
        <groupId>org.springframework.cloud</groupId>           
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>    

    2、服务消费者⼯程启动类使⽤注解@EnableFeignClients添加Feign⽀持

    @SpringBootApplication
    @EnableDiscoveryClient // 开启服务发现
    @EnableFeignClients // 开启Feign
    public class AutodeliverFeignApplication8092 {
      public static void main(String[] args) {
        SpringApplication.run(AutodeliverFeignApplication8092.class,args);
       }  
    }
    注意:此时去掉Hystrix熔断的⽀持注解@EnableCircuitBreaker即可包括引⼊的依赖,因为Feign会⾃动引⼊

    3、创建Feign接⼝

    // name:调⽤的服务名称,和服务提供者yml⽂件中spring.application.name保持⼀致,可以使用url形式,则为直接调取,不走注册中心
    @FeignClient(name="city-service-resume")
    public interface CityFeignClient {
      //调⽤的请求路径
      @RequestMapping(value = "/city/openstate/{userId}",method=RequestMethod.GET)
      public Integer findOpenState(@PathVariable(value = "userId")Long userId);
    }
    注意:
      1)@FeignClient注解的name属性⽤于指定要调⽤的服务提供者名称,和服务提供者yml⽂件中spring.application.name保持⼀致
      2)接⼝中的接⼝⽅法,就好⽐是远程服务提供者Controller中的Hander⽅法(只不过如同本地调⽤了),那么在进⾏参数绑定的时,可以使⽤@PathVariable、@RequestParam、@RequestHeader等,这也是OpenFeign对SpringMVC注解的⽀持,但是需要注意value必须设置,否则会抛出异常

    4、调用 

    @Autowired
    private CityFeignClient cityFeignClient;

    在服务端按照方法的调用即可。

    Feign中http连接池优化

    https://www.jianshu.com/p/8bca50cb11d8

  • 相关阅读:
    笔记:npm常见错误
    微信小程序ES6方法Promise封装接口
    vuex的Store简单使用过程
    vue-cli输入命令vue ui没效果
    uni-app项目导入第三方组件库muse-ui
    记录:拷贝gitblit里的项目使用git命令clone、pull、push等,出现一直在加载,卡住没反应的问题
    html2canvas脚本实现将html内容转换canvas内容
    记录解决phpStudy报出403Forbidden问题的方法
    gulp报错task function must be specified
    随想
  • 原文地址:https://www.cnblogs.com/niunafei/p/13603345.html
Copyright © 2011-2022 走看看