这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战
dubbo
provide consumer registery monitor 四者关系
-
producer(提供方)通过dubbo-service暴露服务。
-
consumer(消费方)通过dubbo-reference加载远程接口、
- loadbalance:负载均衡策略(配置是全部小写)
-
Random 按权重的随机负载均衡策略, dubbo默认的策略
-
RoundRobin 按权重轮询负载
-
LeastActive 最少活跃调用数 , 相同的活跃数则随机调用。活跃数指的是调用前后的时间差,即相应时长。
这种策略可以是响应慢的提供者收到较少的请求。很有效
- ConsistentHash 一致性哈希,相同参数的请求总是发送到同一台提供者上。
sentinel
-
mock 熔断降级 报错异常 走的方法 和接口同级
-
sentinel限流: 流量限制(QPS)+并发线程数控制(RT)
-
resource: 资源名,即限流规则的作用对象(对谁进行限流操作)
-
coutn : 限流阙值
-
grade: 限流类型(流量限制(QPS)+并发线程数控制(RT))
-
limitApp: 限制来源 default不区分调用来源 。
-
strategy: 限流策略
-
controlBehaviot: 流量控制效果(直接拒绝+冷启动+匀速器)
通过FlowRuleManager.loadRules加载限流规则
- 限流策略
-
直接拒绝
-
冷启动
-
匀速器
- 熔断降级策略
-
平均响应市场
-
异常比例
-
异常数
- 提示异常
限流拒绝 FlowException
熔断异常 DeGradeException
- 使用
在0.1.1版本之后可以通过使用sentinelresource注解来进行限流,熔断。使用接入需要引入包和构造
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-annotation-aspectj</artifactId>
<version>1.4.1</version>
</dependency>
@Configuration
public class AopConfiguration {
@Bean
public SentinelResourceAspect sentinelResourceAspect() {
return new SentinelResourceAspect();
}
}
BlockException是FlowException和DeGradeException的父类。
然后在需要限流的地方加上@SentinelResource就行了。该注解有几个属性
1、 value : 必填项 ,表示资源名 , 在我们进行限流或熔断的时候编写规则时设置的资源就是这个地方的value
2、 blockHandler/blockHandlerClass :可选项 对应处理blockException的函数/类名名称。如果未配置则直接抛出blockException
返回类型必须和原方法保持一致。参数在原有基础上多加一个BlockException参数。
blockHandler方法必须public修饰
ps: blockHandler默认和原方法在同一个类中 , 如果通过blockHandlerClass指定了其他的类,那么blockHandler的方法必须是static
3、 fallback: 可选项 , 仅针对降级功能有效(DeGradeException)
fallback函数方法必须public修饰
参数和返回类型必须和原方法保持一致,必须和原方法在同一类中。
如果在SentinelResource中blockHandler和fallback都设置了,在降级的时候优先选择fallback