SpringCloud之Sentinel(二)

热点规则

  该规则其实就是针对方法参数的限流,把后端接口修改为:

    @RequestMapping("/byUrl")
    @SentinelResource(value = "byUrl")
    public String getUser(String p1, String p2) {
        return "javaCoder";
    }

  新增这样一条热点规则:

在这里插入图片描述
  在浏览器中快速刷新访问:

在这里插入图片描述

  访问localhost:8401/user/byUrl?p1=8也是同样的效果,但是访问localhost:8401/user/byUrl?p2=10,该热点规则就是无效的,因为请求路径中没有p1参数。还有一个注意点是,资源名要设置成@SentinelResource的value值,设置成方法的请求路径:/user/byUrl,热点规则也会无效。

  也可以更精密地控制:当参数为某个值时,有其对应的阈值(参数类型只能为基本类型和String):

在这里插入图片描述

  像这里,当访问路径为:localhost:8401/user/byUrl?p1=8,这时QPS要达到10才会进行限流;p1不为8时,QPS还是只要1就会限流。

整合Feign

  把当前该模块作为服务请求方,pom.xml中添加依赖:

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

  bootstrap.yml中添加:

feign:
  sentinel:
    enabled: true

  启动类添加@EnableFeignClients、创建@FeignClient修饰的接口,和之前讲解OpenFeign时一样。有一个不同点是配置超时的地方,之前需要在配置文件里面配一堆超时时间,现在只需要在@FeignClient中配置:

import feign.Request;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.RequestMapping;

@FeignClient(value = "user-service", 
        configuration = {UserFeignClient.ProviderFeignClientConfigure.class})
public interface UserFeignClient {

    @RequestMapping("/user/sayHello")
    String sayHello();

    class ProviderFeignClientConfigure{
        @Bean
        Request.Options options(){
            //配置超时时间,1600ms是请求处理的超时时间,
            //3000ms是请求连接的超时时间
            return new Request.Options(3000, 1600);
        }
    }

}

  就是由@FeignClient的configuration属性,指向的类来控制了。请求服务方和之前一模一样的搭建。

持久化

  nacos可以作为配置中心,Sentinel的持久化就是把各种规则保存到nacos的配置列表中。引入Sentinel的模块,在bootstrap.yml添加:

spring:
  cloud:
    sentinel:
      datasource:
        ds1:
          nacos:
            # 配置nacos地址
            server-addr: ${spring.cloud.nacos.discovery.server-addr}
            namespace: public
            group-id: DEFAULT_GROUP
            # 详见com.alibaba.csp.sentinel.slots.block.flow.FlowRule
            data-id: sentinel-flow
            data-type: json
            # com.alibaba.cloud.sentinel.datasource.RuleType,流控规则
            rule-type: flow

  然后在nacos的配置列表中,添加名为sentinel-flow的配置:

在这里插入图片描述

  具体的json数据:

[
    {
        "resource": "/user/byUrl",
        "limitApp": "default",
        "//": "阈值类型",
        "grade": 1,
        "?count": "单机阈值",
        "count": 1,
        "?clusterMode": "是否集群",
        "clusterMode": false,
        "?strategy": "流控模式",
        "strategy": 0,
        "controlBehavior": 0,
        "warmUpPeriodSec": 4,
        "maxQueueingTimeMs": 200
    }
]

  项目重启后,流控规则会多出来一条数据(这是流控规则的持久化);如果还想另外加规则,bootstrap.yml中,spring.cloud.sentinel.datasource下继续添加ds2(还可以继续加ds3、ds4、ds5…),下面的子元素和ds1一样,只是有2个子元素的值要变,data-id和rule-type:data-id是你要在nacos中新建的配置名称,rule-type的值还可以是degrade(熔断规则)、param-flow(热点规则)、system(系统规则)。nacos中新建配置的key,也是各不相同,见com.alibaba.cloud.sentinel.datasource.RuleType:

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值