我有一个在并行线程中从远程位置下载文件的过程。每个线程在下载启动时发送一条消息,在下载完成时发送第二条消息。这两条消息都有一个下载id属性(guid)将两者关联起来。
接下来,我有一个监控这些下载的传奇故事。它由DownloadStarted事件启动,并使用超时来检测是否及时接收到DownloadEnded事件。
我遇到的问题是,如果在短时间内下载大量文件(1分钟内有1000个文件),那么saga的性能就不会那么好。在某些时候,它需要超过半个小时才能赶上。
我试图通过提供一个IFindSagas插入来加快对传奇的查找。这并没有多大帮助,因为这导致RavenDB在saga数据中的DownloadId上创建了一个自动索引,但也导致FindBy方法经常返回null,因为该索引没有及时更新。
还有什么别的办法可以让我加速这件事吗?我正在考虑使用DownloadId作为佐贺id,因为这已经是一个独特的guid。saga数据的Id属性是可设置的,但是文档明确指出您不应该自己设置id .
使用的传输: MSMQ持久化使用: RavenDB NServiceBus版本:5
发布于 2016-04-25 16:36:31
我重新设计了设置,这样就不再需要传奇了。在下载文件的过程中,我现在启动一个定时器,在后台发送通知,当下载完成后,我停止定时器。这样做的速度要快得多,发送的消息也要少得多。
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();
}https://stackoverflow.com/questions/36791203
复制相似问题