servicecomb-java-chassis icon indicating copy to clipboard operation
servicecomb-java-chassis copied to clipboard

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

Open swxEmily opened this issue 3 months ago • 3 comments

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<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; }

swxEmily avatar Sep 05 '25 03:09 swxEmily

这个是历史原因,流程是在其他handler之前执行的。 你可以不启用(即不配置流控规则),使用自己的handler。 3.x以后机制变化了。

liubao68 avatar Sep 05 '25 09:09 liubao68

这个是历史原因,流程是在其他handler之前执行的。 你可以不启用(即不配置流控规则),使用自己的handler。 3.x以后机制变化了。

但Edge服务不会执行provider handler,自定义流控根本不会执行啊

swxEmily avatar Sep 08 '25 02:09 swxEmily

Edge 2.x只有 consumer handler的概念。 provider缺少元数据。

liubao68 avatar Sep 08 '25 06:09 liubao68