我读到 WCF 服务限制无需任何额外代码即可在内部对请求进行排队。
是否可以监控这些内部队列以了解例如的填充水平?
我的目标是避免客户端可以向服务发送许多请求(例如,通过缓慢或拥塞的服务),因此如果可以监控尚未发送的传出请求的数量,客户端可能会减少流量。
最佳答案
您正在寻找的是一种节流算法。一种常见的此类算法是测量最近 N 次操作的平均延迟。如果延迟超过异常水平,请开始节流,因为显然服务已经饱和。
你可以这样做:
while (true) {
var avgLatencyInSec = GetLatencyAverage();
var thresholdLatency = 0.1; //100ms default latency
var latencyDiff = Math.Max(0, avgLatencyInSec - thresholdLatency);
Thread.Sleep((latencyDiff / thresholdLatency) * (latencyDiff / thresholdLatency));
//you need to tune the sleep amount by a constant factor
}
您的延迟超过阈值越多,节流就会越多。节流呈二次方上升,因此可以保证收敛。
关于.net - WCF内部队列监控(为了避免向服务发送太多请求),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245754/