当前位置: 代码迷 >> 综合 >> SpringCloudAlibaba-Sentinel集成Feign
  详细解决方案

SpringCloudAlibaba-Sentinel集成Feign

热度:94   发布时间:2023-12-12 11:33:54.0

一、概述

Feign 是一个 Java 实现的 Http 客户端,用于简化 Restful 调用。

Feign 跟 OkHttp、HttpClient 这种客户端实现理念不一样。Feign 强调接口的定义,接口中的一个方法对应一个 Http 请求,调用方法即发送一个 Http 请求;OkHttp 或 HttpClient 以过程式的方式发送 Http 请求。Feign 底层发送请求的实现可以跟 OkHttp 或 HttpClient 整合。

要想整合 Feign,首先要了解 Feign 的使用以及执行过程,然后看 Sentinel 如何整合进去。

二、实例

一.POM依赖

        <!--SpringCloud ailibaba nacos --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--SpringCloud ailibaba sentinel-datasource-nacos 后续sentinel做持久化用到--><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId></dependency><!--SpringCloud ailibaba sentinel --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><!--openfeign--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

二.配置文件

除了sentinel配置文件,还需要配置feign去开启支持

# 激活sentinel对openfeign的支持
feign:sentinel:enabled: true

三.主启动类

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

四.接口

//参数value指的是注册在nacos中的服务名称,需要调用的多个实例对象的统一名称,fallback是兜底方法。
@FeignClient(value = "nacos-payment-provider",fallback = UserClientFallback.class)
public interface UserClient {
    User getById(@PathVariable Long id);
}

五.兜底类

熔断的兜底类

@Component
public class UserClientFallback implements UserClient {
        @Override    public User getById(Long id) {
            return new User(-1L,"无此用户","无此用户");    }
}

六.Controller

Controller掉哟Feign,然后再通过value中的服务名称去找对应的服务

@RestController
public class UserClientController  {
        @Resourceprivate UserClient userClient ;@GetMapping("/user/{id}")public User getById(Long id) {
            return userClient.getById(id);    }
}
  相关解决方案