我有一个以并行线程从远程位置下载文件的过程。每个线程在开始下载时发送一条消息,在下载完成时发送第二条消息。两条消息都有一个下载 id 属性 (guid) 来关联两者。
接下来我有一个监控这些下载的传奇。它由 DownloadStarted 事件启动,并使用超时来检测是否及时收到了 DownloadEnded 事件。
我遇到的问题是,当在短时间内(1 分钟内下载 1000 个文件)下载大量文件时,saga 的性能并不是那么好。在某些时候,它需要半个多小时才能赶上。
我试图通过提供 IFindSagas 实现来加速 saga 查找。这并没有太大帮助,因为这导致 RavenDB 在 saga 数据中的 DownloadId 上创建一个自动索引,但也导致 FindBy 方法经常返回 null,因为该索引没有及时更新。
有没有其他方法可以尝试加速传奇?我正在考虑使用 DownloadId 作为 saga id,因为这已经是一个独特的 guid。saga 数据的 Id 属性是可设置的,但文档明确指出您不应该自己设置 id...
使用的传输:MSMQ 使用的持久性:RavenDB NServiceBus 版本:5