定制小程序开发费用SpringCloud之@FeignClient()注解的使用方式

定制小程序开发费用这篇文章主要介绍了SpringCloud中@FeignClient()定制小程序开发费用注解的使用方式,定制小程序开发费用具有很好的参考价值,定制小程序开发费用希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。

文章目录


1、@FeignClient()注解的使用

由于SpringCloud采用分布式微服务架构,难免在各个子模块下存在模块方法互相调用的情况。比如A服务要调用B服务的方法
@FeignClient()注解就是为了解决这个问题的
@FeignClient()注解的源码要求它必须在Interface接口上使用( FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上)

2、@FeignClient标签的常用属性

value:服务名(接口提供方的服务名)
name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
url:url一般用于调试,可以手动指定@FeignClient调用的地址
decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
configuration:配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
fallback:定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
fallbackFactory:工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
path:定义当前FeignClient的统一前缀
此外还要求服务的启动类要有@EnableFeignClients 注解才能使Fegin生效

SpringCloud搭建各种微服务之后,服务间通常存在相互调用的需求,SpringCloud提供了@FeignClient 注解非常优雅的解决了这个问题

3、@FeignClient()简单样例

首先,保证所需要服务都注册成功
我一共有三个服务注册成功。分别为:服务A、服务B、服务C
如下:

给它们的角色
服务A:接口提供方
服务B:接口使用方
服务C:编写远程调用Feign

3.1、调用Get请求带参接口

服务B调用服务A中的getTest-a,有参数a和b

服务A的controller层

@GetMapping("getTest-a")public R<?> getTest(String a, Integer b){    String data = "服务A返回信息===a:" + a + "===b:" + b;    return R.ok(data);}
  • 1
  • 2
  • 3
  • 4
  • 5

服务C中创建TestClient,用于给服务B调用
注意:
Feign 调用接口参数问题;多个值传递用:@RequestParam(“xxx”)
单个值传递:@RequestBody

@FeignClient(contextId = "testClient", value = "服务A")public interface TestClient {    @GetMapping("getTest-a")    R<?> getTest(@RequestParam("a") String a, @RequestParam("b") Integer b);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

服务B调用

// 注入服务C的TestClient@Autowiredprivate TestClient testClient;@GetMapping("getTest-b")public R<?> getTest(){    return testClient.getTest("服务B成功调用", 666);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

测试

3.2、调用Post请求不带参接口

服务B调用服务A中的postTest-a,无参数

服务A的controller层

@GetMapping("getTest-a")public R<?> getTest(String a, Integer b){    String data = "服务A返回信息===a:" + a + "===b:" + b;    return R.ok(data);}@PostMapping("postTest-a")public R<?> postTest(){    String data = "服务A返回信息";    return R.ok(data);}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

服务C的TestClient添加接口

@FeignClient(contextId = "testClient", value = "服务A")public interface TestClient {    @GetMapping("getTest-a")    R<?> getTest(@RequestParam("a") String a, @RequestParam("b") Integer b);    @PostMapping("postTest-a")    R<?> postTest();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

服务B调用

@GetMapping("getTest-b")public R<?> getTest(){    return testClient.getTest("服务B成功调用", 666);}@PostMapping("postTest-b")public R<?> postTest(){    return testClient.postTest();}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

测试

如果觉得不错,可以点赞+收藏或者关注下博主。感谢阅读!
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发