[BUG] - Edge服务不能执行自定义流控Handler
Steps to Reproduce
- 自定义流控handler:provider-service-handler
- Edge服务配置Provider handler对所有待转发的请求(转发至多个不同微服务)进行流控控制
Expected Behavior
自定义流控未执行
Servicecomb Version
2.9.0
Additional Context
AbstractRestInvocation中checkQpsFlowControl只能执行CSE自带的ProviderQpsFlowControlHandler,不能执行自定义的流控handler,且函数为private,也不能通过自定义子类覆盖
private Holder<Boolean> checkQpsFlowControl(OperationMeta operationMeta) { Holder<Boolean> 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; }
这个是历史原因,流程是在其他handler之前执行的。 你可以不启用(即不配置流控规则),使用自己的handler。 3.x以后机制变化了。
这个是历史原因,流程是在其他handler之前执行的。 你可以不启用(即不配置流控规则),使用自己的handler。 3.x以后机制变化了。
但Edge服务不会执行provider handler,自定义流控根本不会执行啊
Edge 2.x只有 consumer handler的概念。 provider缺少元数据。