使用Feign完成服务调用

添加Maven依赖

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

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

配置Feign

# 配置Feign
feign:
  client:
    config:
      # 服务提供者的服务名
      nacos-school-server:
        # 设置日志级别
        loggerLevel: FULL

        # 设置契约配置:支持Feign原生注解
        # contract: feign.Contract.Default

        # 设置请求超时时间,超时会抛出异常,单位毫秒,默认值2s
        # readTimeout: 5000

        # 设置连接超时时间,超时会抛出异常,单位毫秒,默认值5s
        # connectTimeout: 10000

        # 配置自定义请求拦截器
        requestInterceptors:
          - com.tigerkin.feign.CustomRequestIntercoptor

添加Feign接口

/**
 * @ClassName SchoolServiceFeign
 * @Description
 * 		value: 服务器提供者的应用程序名
 * 		path: 可以配置统一前缀路径
 * 		fallback: 异常回调
 * @Author tigerkin
 * @Date 2022/3/3 14:14
 */
@Component
@FeignClient(value = "nacos-school-server", path = "/school", fallback = SchoolServiceFallback.class)
public interface SchoolServiceFeign {

    // Feign原生注解:@RequestLine("GET /get") 请求映射注解,不指定GET POST等请求方法就会抛出异常
    // Feign原生注解:@Param() 参数注解
    @GetMapping("/get")
    String get();
}

添加Feign回调

Feign回调需要整合Ribbon或者Sentinel熔断降级,否则就不会生效。由于Ribbon已经不维护,这里就整合Sentinel。

  • 添加依赖
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 添加配置
feign:
  # 集成Sentinel后,需要设置为true
  sentinel:
    enabled: true
  • 整合后回调就可以生效了
/**
 * @ClassName SchoolServiceFallback
 * @Description 异常回调需要实现Feign接口
 * @Author tigerkin
 * @Date 2022/3/3 14:15
 */
@Component
public class SchoolServiceFallback implements SchoolServiceFeign {

    @Override
    public String get() {
        return "获取学校请求调用失败";
    }
}

服务调用

服务调用就比较简单了,就跟调用方法一样。依赖注入Feign接口,然后就只调用方法即可。

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    SchoolServiceFeign schoolServiceFeign;

    @GetMapping("/getSchool")
    public String getSchool() {
        return String.format("[Feign] %s", schoolServiceFeign.get());
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Feign是一个用于实现接口代理远程调用的组件。在进行跨服务调用时,首先需要定义一个Feign接口。这个接口用于声明需要调用的目标服务的方法和参数。接着,通过注解@FeignClient来指定需要调用服务的名称。例如,使用@FeignClient("coupon-template-service")来指定调用coupon-template-service服务。然后,可以在接口中使用@GetMapping或@RequestMapping等注解来指定具体的请求路径和参数。最后,通过在方法上添加@RequestParam或@RequestBody等注解来传递参数。这样就完成Feign的跨服务调用配置。 Feign的跨服务调用是通过动态代理实现的,它会根据接口的定义在运行时动态生成代理类,并通过代理类来发起远程调用。因此,在实际调用时,我们只需要调用本地方法一样调用Feign接口的方法即可。总结起来,Feign服务调用的具体步骤为:1) 定义Feign接口;2) 使用@FeignClient注解指定调用服务名称;3) 在接口中定义具体的请求路径和参数;4) 通过注解传递参数;5) 调用Feign接口的方法来发起远程调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用 OpenFeign 实现跨服务调用](https://blog.csdn.net/weixin_40364776/article/details/128696456)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [怎样使用feign进行远程调用其他服务](https://blog.csdn.net/qq_55278081/article/details/126308889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Spring boot2X Consul如何使用Feign实现服务调用](https://download.csdn.net/download/weixin_38602982/12744704)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值