详解Spring-Cloud2.0之Feign调用远程服务指南

 更新时间:2019年01月31日 14:51:54   作者:Moshow郑锴  
这篇文章主要介绍了详解Spring-Cloud2.0之Feign调用远程服务指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Feign是什么

Feign是简化Java HTTP客户端开发的工具(java-to-httpclient-binder),它的灵感来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到HTTP API的复杂度,不区分是否为restful。

为什么使用Feign

开发人员使用Jersey和CXF等工具可以方便地编写java client,从而提供REST或SOAP服务;开发人员也可以基于Apache HC等http传输工具包编写自己的java http client;而Feign的关注点在于简化开发人员使用工具包的复杂度,以最少的代码编写代码从而提供java http客服端。通过定制解码器和异常处理,开发人员可以任意编写文本化的HTTP API。

好了,上面是官方的,假如要我说Feign是什么。

一句话解释Feign

可以理解为Feign是一个超级方便的调用Spring-Cloud远程服务的框架/工具,帮助开发者以更少耦合更少代码更快更兼容的方法进行远程服务调用。

配置文件

调用的时候,双方的application.yml一定要加上两个配置,因为双方服务器是需要相互发现并获取服务列表的。

不然会报错提示“feign Load balancer does not have available server for client: xxxx”

eureka:
 client:
  #是否将自己注册到eureka服务注册中心,默认为true
  register-with-eureka: true
  #是否从服务注册中心获取可用的服务清单,默认为true
  fetch-registry: true
  serviceUrl:
   defaultZone: http://192.168.114.152:9091/eureka/

然后就是再pom.xml里面加上最新出炉的feign包

    <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-feign -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-feign</artifactId>
      <version>1.4.4.RELEASE</version>
    </dependency>

服务调用者

启动器一定要加@EnableFeignClients,代表进行Feign调用,Feign会到Eureka拉取服务列表,供调用的。

@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients
public class CheckCollectSysApplication {
  public static void main(String[] args) {
    SpringApplication.run(CheckCollectSysApplication.class,args);
  }
}

调用方业务方面。推荐是写一个interface类,把方法封装起来供其他Controller调用。

这里要注意

1. @FeignClient里面一定要指定是name,很久以前的版本指定的是serviceId,那个已经过时了。

2. 如果用到占位符,@PathVariable也需要指定value,这是一个强制要求,不然会报错,提示“Feign PathVariable annotation was empty on param 0.”

3. RequestParam也需要指定value,不然会提示”RequestParam.value() was empty on parameter 1”

另外,别人说什么GetMapping啊PutMapping啊不行的,其实不会的,我试过都可以了

@FeignClient(name = "demo-checksys")
public interface ChecysysRemoteClient {
  /**
   * 获取基本信息
   *(PutMapping的URL=远程项目的Path+ControllerPath+MethodPath
   * 简单的说,就是你直接postman可以访问的项目路径) 
   */
  @PutMapping("/checksys/register/info/{checkNum}")
  public ApiReturnObject updateCheckRegisterByBodyCheck(@PathVariable(value="checkNum") String checkNum,@RequestParam(value="bodyJson") String bodyJson);
}

这里的FeignClient的name是指注册到Eureka的被调用者的ApplicationName,就是你应用的名字啦,application.yml里面可以进行配置

spring:
  application:
    name: demo-checksys

PutMapping的URL=远程项目的Path+ControllerPath+MethodPath,简单的说,就是你直接postman可以访问的项目路径。

例如项目是http://127.0.0.1:8080/demo/user/getUser/{userId},

那么这里写的就是”/demo/user/getUser/{userId}”

被调用者

至于被调用者,一如既往的code,没什么不同,毕竟是被别人调用,这种调用方式很安逸。

  /**
   * 获取基本信息
   */
  @PutMapping("/info/{checkNum}")
  public ApiReturnObject updateCheckRegisterByBodyCheck(@PathVariable String checkNum,String bodyJson) {
    //这里可以打印一些日志
    outSystemService.updateCheckRegisterByBodyCheck(checkNum, bodyJson);
    return ApiReturnUtil.success("调用成功");
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java中classpath的基本概念和配置方法详析

    Java中classpath的基本概念和配置方法详析

    这篇文章主要介绍了Java中的classpath概念,包括其基本概念、设置方法以及在Java应用中的作用,在IDE中的配置也进行了详细说明,并提到了一些通用注意事项,需要的朋友可以参考下
    2025-02-02
  • springboot3解决跨域的几种方式小结

    springboot3解决跨域的几种方式小结

    这篇文章主要介绍了springboot3解决跨域的几种方式,文中通过代码示例给大家介绍的非常详细,对大家的解决跨域有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • java循环遍历无规则json的方式:gson、fastjson、orgjson

    java循环遍历无规则json的方式:gson、fastjson、orgjson

    这篇文章主要介绍了java循环遍历无规则json的方式:gson、fastjson、orgjson,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • Spring Boot 功能整合的实现

    Spring Boot 功能整合的实现

    Spring Boot生态丰富,集成也不算困难。本文简单的介绍下功能整合的步骤,最后提供一个具体的实现例子,学习Spring Boot的同学可以参考下
    2021-05-05
  • JAVA使用POI获取Excel的列数与行数

    JAVA使用POI获取Excel的列数与行数

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 下面这篇文章给大家介绍了JAVA使用POI获取Excel列数和行数的方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • springboot如何根据配置屏蔽接口返回字段

    springboot如何根据配置屏蔽接口返回字段

    这篇文章主要介绍了springboot如何根据配置屏蔽接口返回字段问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • 一文快速掌握Java中的搜索算法和排序算法

    一文快速掌握Java中的搜索算法和排序算法

    这篇文章主要为大家详细介绍了Java中常用的搜索算法和排序算法的实现,例如二分查找、冒泡排序、选择排序等,文中的示例代码讲解详细,希望对大家有所帮助
    2023-04-04
  • spring boot输入数据校验(validation)的实现过程

    spring boot输入数据校验(validation)的实现过程

    web项目中,用户的输入总是被假定不安全不正确的,在被处理前需要做校验。本文介绍在spring boot项目中实现数据校验的过程,通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-09-09
  • java gui详解贪吃蛇小游戏实现流程

    java gui详解贪吃蛇小游戏实现流程

    刚开始学JAVA GUI,就练手写了一个小时候经常在诺基亚上玩的一个小游戏__贪吃蛇.做的比较简单,但还是可以玩的.感兴趣的朋友快来看看吧
    2021-11-11
  • java读取json文件的2种方式例子

    java读取json文件的2种方式例子

    这篇文章主要给大家介绍了关于java读取json文件的2种方式,在开发过程中有时会遇到需要读取.json文件的需求,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07

最新评论