Springcloud的核心组件之Feign

假如现在有三个服务,入库,库存,出库,这三个微服务是互相隔离的,那么微服务和微服务之间如何互相调用呢?显然三个微服务都可以采用http通信,也就是可以采用Ribbon+restTemplate进行互相访问(具体如何使用上篇文章讲Ribbon组件有案例),但是这种方式对参数传递和使用都不是很方便,所以弃用此方式,采用Feign进行服务之间的调用,大大简化调用过程。

Feign如何使用?

当我们使用feign客户端时,一般要做以下三件事情 :

1:使用注解@EnableFeignClients启用feign客户端;

2:使用注解@FeignClient 定义feign客户端;

3:使用注解@Autowired使用上面所定义feign的客户端;

Feign使用案例

1: 当我们把服务都注册到注册中心,那么首先我们要在项目中引入Feign的依赖:

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId><version>2.2.3.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>2.2.3.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

2:需要在启动类添加@EnableFeignClients注解

@EnableFeignClients//启用feign客户端
@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication(scanBasePackages = {"com.wcf.client"})
public class ConsumerApplication {public static void main(String[] args) {SpringApplication.run(ConsumerApplication.class, args);}
}

3:使用注解@FeignClient 定义feign客户端

在调用方编写接口类

 //在调用方编写接口类@FeignClient(name = "provider-client") //name="provider-client"就是服务提供方暴露的接口名称public interface FeignTestInterface {@RequestMapping(value="/provider-feign/getInfo",method = RequestMethod.GET) //value="/provider-feign/getInfo"就是服务方暴露的接口地址List<String> getNameInfo(@RequestParam("names") String[] names);}

4:在调用方的controller中调用接口:

使用注解@Autowired使用上面所定义feign的客户端

 @RestController
public class FeignTestController {@Autowiredprivate FeignTestInterface testInterface;@RequestMapping("/getNameInfo")public String config() {String[] names = {"李","王"};return testInterface.getNameInfo(names).toString();}
}

5:在服务提供方提供如下方法:

@RestController
@RequestMapping("/provider-feign")
public class FeignTestController {@GetMapping("/getInfo")public List<String> Test(String[] names) {List<String> name = new ArrayList<String>(Arrays.asList(names));name.add("郭");return name;}
}

服务提供方的配置文件如下

#服务端口
server.port=8077
#服务名称,#即为上面@FeignClient注解的name值(name = "provider-client")
spring.application.name=provider-client
#服务地址
eureka.instance.hostname=localhost
#取消检索服务
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
​
#注册中心路径,表示向这个注册中心注册服务,如果向注册中心注册多个服务,用“,”进行分隔
eureka.client.serviceUrl.defaultZone=http://localhost:8011/eureka

6:启动并访问

  • 1:启动注册中心

  • 2:启动服务提供方

  • 3:提供调用方服务

  • 4:访问地址:http://localhost:8091/getNameInfo

Feign机制:动态代理

Feign机制就是使用了动态代理。首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理对象,该对象生成动态代理时会根据代理类方法生成一个RequestTemplate,该对象封装了HTTP请求需要的全部信息,如请求参数名、请求方法等信息都在这个过程中确定,当请求该对象时候,会根据该对象封装成Request去调用Http Client(默认JDK的URLConnection,可以替换成Okhttp等Http框架),然后再委托Ribbon的LoadBalanceClient做负载均衡,完成服务之间的调用。

欢迎关注公众号!公众号回复:入群 ,扫码加入我们交流群!

彻底学会微服务之间的服务调用【第四期】相关推荐

  1. 微服务之间的最佳调用方式

    上一篇:3600万中国人在抖音"上清华" 0.2T架构师学习资料干货分享 茉莉花,别名:茉莉,拉丁文名:Jasminum sambac (L.) Ait,木犀科.素馨属直立或攀援灌 ...

  2. SpringCloud,Eureka,服务注册,微服务之间的项目调用

    文章目录 前言 一.Eureka是什么? 二.项目实现步骤 1.项目外壳的搭建 2.Eureka注册中心服务搭建 3.Provider(提供者)服务搭建 4.Consumer(消费者)服务搭建 总结 ...

  3. 微服务之间的服务治理 方案

    微服务之间的服务治理 方案              方案1. dubbo 和 zookeeper 结合使用       一.公司技术 无     二.api是否完善 dubbo 不在进行维护    ...

  4. SpringCloud微服务之间使用Feign调用不通情况举例

    文章目录 摘要 情景1.远程调用失败 原因1:子项目接口没调通 -> 可能是配置文件名字/地址有问题(name或者url) 原因2:测试本地子项目没有启动,导致无法调用接口 原因3:Feign里 ...

  5. feign调用多个服务_spring cloud各个微服务之间如何相互调用(Feign、Feign带token访问服务接口)...

    1.首先先看什么是Feign. 2.若其他服务的接口未做权限处理,参照上文第1点的博文即可. 3.若其他服务的接口做了权限的处理(例如OAuth 2)时该如何访问? a.有做权限处理的服务接口直接调用 ...

  6. php在fpm运行模式下实现服务之间的服务熔断、服务监控、调用日志

    https://github.com/hongg-coder/http-manager 前言 相信在场各位的泥腿子(如果大佬请跳过这段话)每天工作都是穿梭在curd和curl的爱恨情仇之中,但是本文不 ...

  7. feign调用service_微服务之间的调用(Ribbon与Feign)

    概述 在前面的文章中,我们讲了使用Eureka作为服务注册中心,在服务启动后,各个微服务会将自己注册到Eureka server.那么服务之间是如何调用?又是如何进行负载均衡的呢?本文讲讲服务之间调用 ...

  8. JHipster技术栈定制 - 基于UAA的微服务之间安全调用

    本文通过代码实例演示如何通过UAA实现微服务之间的安全调用. uaa: 身份认证服务,同时也作为被调用的资源服务.服务端口9999. microservice1: 调用uaa的消费者服务,服务端口80 ...

  9. eureka自我保护时间_spring cloud中微服务之间的调用以及eureka的自我保护机制详解...

    上篇讲了spring cloud注册中心及客户端的注册,所以这篇主要讲一下服务和服务之间是怎样调用的 基于上一篇的搭建我又自己搭建了一个客户端微服务: 所以现在有两个微服务,我们所实现的就是微服务1和 ...

最新文章

  1. oracle 12c 13姨
  2. python解析xml文件elementtree_Python中使用ElementTree解析XML示例
  3. elementui下拉框 清空_巧妙解决element-ui下拉框选项过多的问题
  4. mysql四种隔离级别知乎_详解MySQL事务的四大特性和隔离级别
  5. Hadoop框架:DataNode工作机制详解
  6. 有一门课不及格的学生(信息学奥赛一本通-T1048)
  7. 循环序列模型 —— 1.12 深层循环神经网络
  8. Javascript找出所有没有重复的字符(优化)
  9. 苹果mac预览应用使用方法
  10. 单片机差分GPS定位系统设计
  11. 使用dhtmlxgantt制作任务进度表
  12. 百度翻译API使用简介
  13. Matlab/Simulink-Boost电路双闭环仿真搭建
  14. 游戏虚拟引擎自学_自学5个小时,如何做出一个游戏?
  15. VMware Horizon 8 2106 -- 用于管理虚拟桌面 (VDI)、应用和在线服务的领先平台
  16. Qt 解析 DXF 文件
  17. 【iOS开发】从小白到低水平开发者进厂实习自救指南
  18. jq ajax简单使用方法
  19. 《卜算子·咏梅》 陆游
  20. 【网络原理】一个数据包从发送到接收在网络中经历了那些过程(详细分析)

热门文章

  1. c语言输出字符串显示在屏幕上,C语言输出printf
  2. ddos攻击和cc攻击的区别
  3. 数据增强增广方法及实现
  4. Nginx 转发匹配规则,后端程序员必备知识点
  5. python串口通信_python串口编程实例 - 全文
  6. Windows下nginx的启动,重启,停止命令
  7. addonsmaker怎么制作_如何制作一个自定义Add-ons|物品篇
  8. 金山-西山居2011实习生招聘笔试题目
  9. IDAP出现的问题汇总
  10. 为什么计算机有信息记忆功能,存储器是计算机实现记忆功能的一个重要组成部分...