首页 > 其他分享 >微服务之间的交互-Feign

微服务之间的交互-Feign

时间:2022-12-14 10:26:09浏览次数:32  
标签:Feign 调用 服务 RestTemplate 接口 注解 交互

我们知道Eureka Client会保存各个服务的信息,其中包含各个服务的地址。

那么服务之间到底是怎样通过这些信息进行交互的呢?

Spring Cloud服务间的调用默认支持两种方式——Ribbon和Feign,具体来说就是使用RestTemplate和FeignClient来调用。

不管使用什么方式,本质上都是通过调用服务的HTTP接口进行交互,而参数和结果默认都是通过Jackson序列化和反序列化。

 

9.4节中,我们通过RestTemplate在商品微服务和订单微服务之间进行了HTTP请求,在内部请求过程中使用了“http://goods/goods/one?id=id”这个地址,其中并没有涉及IP地址、域名和端口之类的东西,而是直接通过商品服务名的方式来调用的。

正是由于我们添加了@LoadBalanced注解,才能加入Ribbon负载均衡器使用“改造”过的RestTemplate。

当RestTemplate发起请求时,请求会被LoadBalancerInterceptor拦截,实际的请求是由LoadBalancer发起的,LoadBalancer会寻找默认或指定的负载均衡策略来对HTTP请求进行转发。

 

在实际开发中,由于对服务的依赖和调用可能不止一处,往往一个接口会被多处调用,所以我们通常都会针对各个服务自行封装一些客户端类来包装这些依赖服务的调用,此时如果使用RestTemplate进行封装,我们会发现几乎每一个调用都是简单的模板化内容。

 

因此,为了简化自行封装服务调用客户端类的开发,Spring Cloud提供了Feign对服务调用进行封装,由它来帮助我们定义和实现依赖服务接口,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。

Feign是一个声明式的Web Service客户端。

Feign提供了HTTP请求的模板,通过编写简单的接口和插入注解,就可以定义好HTTP请求的参数、格式、地址等信息。

Feign支持多种注解,包括Feign自带注解和JAX-RS注解等。

用Feign的注解定义接口,调用这个接口(类似controller调用service应用),就可以完成服务请求及相关处理。

Feign整合了Ribbon和Hystrix(将在第12章和第13章中进行讲解),可以让我们不再需要显式地使用这两个组件。

 

本节我们将使用Feign的方式来实现9.4节订单微服务调用商品微服务的功能。首先,加入Feign依赖,如程序清单9-15所示。

 

添加完依赖后需要开启Feign,在启动类上添加@EnableFeignClients注解即可,如程序清单9-16所示。

 我们在订单微服务中创建一个GoodsService接口,然后在其上方加上@FeignClient注解,如程序清单9-17所示。

 

@FeignClient的value填写商品微服务的名称goods,然后定义一个接口,在它的上方写上商品微服务对应的controller的RequestMapping即可

 

需要注意的是,这里需要使用@RequestParam将请求参数绑定到对应的商品微服务的接口上才能实现调用,意思是@RequestParam的值“id”和商品微服务相应controller方法findById的参数名一致就行。

最后,我们把9.4节使用RestTemplate调用的代码注释掉。然后注入GoodsService对象,接着调用它的findById方法即可,

如程序清单9-18所示。

 

 

 

 

 

我们在浏览器中进行测试,结果如图9-15和图9-16所示,如此便实现了用Feign完成服务之间的调用。

 

 

标签:Feign,调用,服务,RestTemplate,接口,注解,交互
From: https://www.cnblogs.com/cnetsa/p/16981368.html

相关文章

  • 苏州胜网十周年|匠心十载 致力打造多元化云计算数据中心服务商
    10年来之不易,10年愈挫愈勇。10岁的胜网科技走向了成熟,10岁的胜网科技走向了规范。您是胜网科技10年的朋友, 您更是胜网科技10年的恩人。感谢我们的祖国,您开放的政策和强大......
  • 搭建Eureka Client订单微服务
    在9.3节中我们搭建好了一个商品微服务,本节我们来搭建一个订单(order)微服务,实现简单的查询订单的功能。 通常订单只保存商品的ID,而我们在查询订单的时候需要看到商品的详......
  • Vercel是什么?怎么部署Node服务?
    Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!之前在写面试常客:HTTP缓存时,曾经就强缓存和协商缓存写过两个......
  • 搭建Eureka Client商品微服务
     我们搭建好了EurekaServer,本节我们来搭建一个EurekaClient商品(goods)微服务,实现简单的查询商品的功能。我们使用IDEA创建一个名为goods的SpringBoot项目,如图9-4所示。......
  • 了解Eureka服务注册与发现。
    Eureka分为EurekaServer和EurekaClient,以实现服务注册以及服务发现的功能。  当其是EurekaServer时,便是服务端,也叫服务注册中心,所有的客户端会向其注册。  注......
  • 搭建Eureka Server服务注册中心
    了解了Eureka的作用之后,我们搭建一个EurekaServer注册中心。我们使用IDEA创建一个名为eureka-server的SpringBoot项目,如图9-1所示。然后,在“dependencies”界面中勾选......
  • DELL服务器基于centos7安装OMSA
    DELL服务器基于centos7安装OMSA参考链接:https://www.cnblogs.com/sky-cheng/p/14951071.htmlhttps://www.dell.com/community/Systems-Management-General/Has-Centos7......
  • ubuntu20 操作服务常用的命令
    建议不要乱搞,搞错了开机死循环https://www.jb51.net/article/233283.htm如果重启电脑后,ks仍然蓝屏白字,大概率是服务没有启动可任意使用命令检查一下任务状态system......
  • 【Web开发】Python实现Web服务器(FastAPI)
    文章目录​​1、简介​​​​2、安装​​​​3、官方示例​​​​3.1入门示例​​​​3.2跨域CORS​​​​3.3文件操作​​​​3.4WebSocket​​​​结语​​1、简介Fas......
  • ANSYS二次开发:Python和ANSYS进行交互操作(PyAnsys库,DPF)
    文章目录​​1、简介​​​​2、安装​​​​2.1ansys-mapdl-core​​​​2.2pyaedt​​​​2.3ansys-dpf-core​​​​2.4ansys-dpf-post​​​​2.5ansys-mapdl-read......