Fork me on GitHub

SpringcloudAlibaba-Sentinel

简介

Alibaba出版,分布式系统的流量防卫兵,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
特征:

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Apache Dubbo、gRPC、Quarkus 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。同时 Sentinel 提供 Java/Go/C++ 等多语言的原生实现。
  • 完善的 SPI 扩展机制:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

Sentinel 的使用可以分为两个部分:

  • 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持(见 主流框架适配)。
  • 控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。
    image
    官网地址:https://github.com/alibaba/Sentinel/wiki/介绍

代码(Sentinel是针对消费端,故服务提供端代码不需要任何修改)

  • 消费端POM引入依赖
         <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
  • 消费端YML添加
    sentinel:
      transport:
        # 配置Sentinel dashboard地址
        dashboard: localhost:8080
        # 默认8719端口,键入被占用会自动从8719+1,直到找到未被占用的端口
        port: 8719
  • 添加接口
    @GetMapping("/getSentinel")
    public String getSentinel(){
        
        return "Sentinel demo!";
    }

客户端启动

客户端下载地址:
链接:https://pan.baidu.com/s/10N9wOaeNj7PasaZKpExBaw
提取码:lxoi
启动命令: java -jar sentinel-dashboard-1.8.3.jar

添加限流设置

OpenFeign

简介

OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求,用法其实就是编写一个接口,在接口上添加注解即可。
可以简单理解它是借鉴Ribbon的基础之上,封装的一套服务接口+注解的方式的远程调用器。
官网地址:https://spring.io/projects/spring-cloud-openfeign

代码

  • pom依赖
       <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.5.RELEASE</version>
        </dependency>
  • yml配置
#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
  #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  #指的是建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000
# 激活Sentinel对OpenFeign的支持
feign:
  sentinel:
    enabled: true
  • 添加注解
//添加此注解
@EnableFeignClients
  • 添加消费端接口

 @GetMapping("/getFeign/{id}")
    public String getFeign(@PathVariable Integer id){
        return service.getFeign(id+"");
    }
  • 添加Feign接口
@Service
//表示远程调用服务名称
@FeignClient(value = "nacos-config",fallback = OpenFeignServiceImpl.class)
public interface OpenFeignService {

    /**
     * 此方法表示远程调用info/{id}接口
     */
    @GetMapping("/getFeign/{id}")
    public String getFeign(@PathVariable String id);

}
  • 添加服务降级接口
@Component
public class OpenFeignServiceImpl implements OpenFeignService {
    @Override
    public String getFeign(String id) {
        return "服务降级,请稍后访问!";
    }
}
  • 添加服务提供端请求接口
   @GetMapping("/getFeign/{id}")
    public String getFeign(@PathVariable String id){
        return "Feign进行访问,传入ID:"+id;
    }

测试

测试成功

Gitee地址

https://gitee.com/zhuayng/foundation-study/tree/develop/OtherFrame/SpringCloudAlibaba/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example

posted @ 2022-02-13 14:59  晨度  阅读(70)  评论(0编辑  收藏  举报