apache / apache/servicecomb-java-chassis
[BUG] - Edge服务不能执行自定义流控Handler
- 主要言語
- Java
- スター
- 1.9k
- フォーク
- 814
- 平均マージ
- 8日 23時間
- マージ済み PR(30日)
- 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