apache / apache/servicecomb-java-chassis

[BUG] - Edge服务不能执行自定义流控Handler

未关闭
#4,929 3 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
bug
主要语言
Java
星标
1.9k
派生
814
平均合并
8 天 23 小时
30 天内合并 PR
1

描述

### Steps to Reproduce

1. 自定义流控handler:provider-service-handler
2. Edge服务配置Provider handler对所有待转发的请求(转发至多个不同微服务)进行流控控制

### Expected Behavior

自定义流控未执行

### Servicecomb Version

2.9.0

### Additional Context

AbstractRestInvocation中checkQpsFlowControl只能执行CSE自带的ProviderQpsFlowControlHandler,不能执行自定义的流控handler,且函数为private,也不能通过自定义子类覆盖
`private Holder checkQpsFlowControl(OperationMeta operationMeta) {
Holder qpsFlowControlReject = new Holder<>(false);
@SuppressWarnings("deprecation")
Handler providerQpsFlowControlHandler = operationMeta.getProviderQpsFlowControlHandler();
if (null != providerQpsFlowControlHandler) {
try {
providerQpsFlowControlHandler.handle(invocation, response -> {
qpsFlowControlReject.value = true;
produceProcessor = ProduceProcessorManager.INSTANCE.findDefaultJsonProcessor();
sendResponse(response);
});
} catch (Throwable e) {
LOGGER.error("failed to execute ProviderQpsFlowControlHandler", e);
qpsFlowControlReject.value = true;
sendFailResponse(e);
}
}
return qpsFlowControlReject;
}`

贡献指南

这个仓库没有索引到贡献指南

调研方向

从 AbstractRestInvocation.checkQpsFlowControl 和 issue 中描述的 provider handler 配置开始。使用将请求转发到多个服务的自定义 provider-service-handler,在 ServiceComb 2.9.0 上复现 Edge 服务场景。当配置的自定义 flow-control handler 被调用,而不再只是调用内置的 ProviderQpsFlowControlHandler 时,即表示完成。

由索引模型根据 Issue 内容生成。

评估

技术栈
java
领域
backend
Issue 类型
缺陷
难度
4/5
预计耗时
3-5 天
活跃度
停滞
描述清晰度
基本清楚
新手友好度
42/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。