apache / apache/servicecomb-java-chassis
[BUG] - Edge服务不能执行自定义流控Handler
- Ngôn ngữ chính
- Java
- Star
- 1.9k
- Fork
- 814
- Merge trung bình
- 8 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 1
Mô tả
### 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;
}`
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Hướng nghiên cứu
Bắt đầu với AbstractRestInvocation.checkQpsFlowControl và cấu hình provider handler được mô tả trong issue. Tái hiện kịch bản dịch vụ Edge trên ServiceComb 2.9.0 với một provider-service-handler tùy chỉnh chuyển tiếp các request đến nhiều service. Hoàn thành khi flow-control handler tùy chỉnh đã cấu hình được gọi, thay vì chỉ có ProviderQpsFlowControlHandler tích hợp được gọi.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- java
- Lĩnh vực
- backend
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 42/100