SpringCloudAlibaba-Sentinel集成Feign

本文介绍了如何将Sentinel与Feign结合,以实现微服务间的流量控制。首先,我们引入了相关依赖,包括Spring Cloud Alibaba Nacos、Sentinel和Feign。接着,在配置文件中启用了Sentinel对Feign的支持。然后,创建了一个Feign接口,定义了调用其他服务的方法,并提供了熔断兜底类。最后,在Controller中通过Feign调用服务并实现了流量控制。这种方式使得接口调用更加安全且易于管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

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  {    
    @Resource
    private UserClient userClient ;
	 @GetMapping("/user/{id}")
	public User getById(Long id) {        
		return userClient.getById(id);    
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值