【问题标题】:WCF internal queues monitoring (in order to avoid sending too many requests to the service)WCF 内部队列监控(为了避免向服务发送过多的请求)
【发布时间】:2012-06-30 00:55:53
【问题描述】:

我读到 WCF 服务限制在内部将请求排入队列,无需任何额外代码。 是否可以监控这些内部队列以了解例如填充水平?

我的目标是避免客户端向服务发送许多请求(例如,通过缓慢或拥塞的服务),因此如果可以监控尚未发送的传出请求的数量,客户端可能会流量少。

【问题讨论】:

标签: .net wcf .net-4.0 wcf-4


【解决方案1】:

您正在寻找的是一种节流算法。一种常见的此类算法是测量最后 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
}

您的延迟超过阈值越多,限制就越多。限制以二次方上升,因此可以保证收敛。

【讨论】:

  • 为了计算这个因子,我是否应该通过尝试不同的值来进行一些测试(然后选择似乎是一个足够的时间间隔来限制请求发送的因子)?
  • 是的,试试看。这个算法只需要一点调整。节流的二次增加确保您不需要完全正确。它会在一定程度上自我调整。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
相关资源
最近更新 更多