2016-04-22 49 views
0

我有一个进程从并行线程的远程位置下载文件。 每个线程在下载开始时发送消息,并在下载完成时发送第二个消息。这两个消息都有一个下载id属性(guid)来关联这两者。优化传奇查找

接下来我有一个传奇,监视这些下载。它由DownloadStarted事件启动,并使用超时检测是否及时收到DownloadEnded事件。

我遇到的问题是,在短时间内下载大量文件(1分钟内有1000个文件)时,传奇的性能并不是那么好。在某些时候,它需要超过半小时才能赶上。

我试图通过提供一个IFindSagas约束来加速传奇查找。这并没有多大帮助,因为这导致RavenDB在传奇数据中的DownloadId上创建自动索引,但也导致FindBy方法经常返回null,因为该索引没有及时更新。

有没有其他方法可以尝试加速这个传奇? 我正在考虑使用DownloadId作为传奇ID,因为这已经是一个独特的GUID。传奇数据的ID属性是可设置的,但文件明确规定,你不应该把自己设定的ID ...

运输中使用:使用MSMQ 持久性:RavenDB NServiceBus版本:5

回答

0

我返工设置,以便不再需要传奇。 在下载文件的过程中,我现在启动一个定时器在后台发送通知,并在下载完成时停止定时器。这工作速度快得多,并且导致发送的消息少得多。

using (var timer = new Timer(1000) {AutoReset = true}) 
{ 
    var start = DateTime.Now; 
    timer.Elapsed += (sender, e) => 
         _bus.Send(new NotifyHangingDownload(correlationId, 
                  file.Filename, 
                  start, 
                  TimeSpan.FromMilliseconds(1000))); 
    timer.Start(); 
    client.Download(file, destination, false); 
    timer.Stop(); 
}