首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化saga查找

优化saga查找
EN

Stack Overflow用户
提问于 2016-04-22 10:23:52
回答 1查看 55关注 0票数 0

我有一个在并行线程中从远程位置下载文件的过程。每个线程在下载启动时发送一条消息,在下载完成时发送第二条消息。这两条消息都有一个下载id属性(guid)将两者关联起来。

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

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

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

还有什么别的办法可以让我加速这件事吗?我正在考虑使用DownloadId作为佐贺id,因为这已经是一个独特的guid。saga数据的Id属性是可设置的,但是文档明确指出您不应该自己设置id .

使用的传输: MSMQ持久化使用: RavenDB NServiceBus版本:5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-25 16:36:31

我重新设计了设置,这样就不再需要传奇了。在下载文件的过程中,我现在启动一个定时器,在后台发送通知,当下载完成后,我停止定时器。这样做的速度要快得多,发送的消息也要少得多。

代码语言:javascript
复制
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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36791203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档