优化传奇查找
Optimizing saga lookup
我有一个进程可以在并行线程中从远程位置下载文件。
每个线程在下载开始时发送一条消息,在下载完成时发送第二条消息。两条消息都有一个下载 ID 属性 (guid) 来关联两者。
接下来我有一个监控这些下载的 saga。它由 DownloadStarted 事件启动,并使用超时检测是否及时收到 DownloadEnded 事件。
我遇到的问题是,当在短时间内(1 分钟内下载 1000 个文件)下载大量文件时,saga 的性能不是很好。有的时候要半个多小时才能赶上。
我试图通过提供 IFindSagas 实现来加速 saga 查找。这并没有多大帮助,因为这导致 RavenDB 在 saga 数据中的 DownloadId 上创建一个自动索引,但也导致 FindBy 方法经常 return null 因为该索引没有及时更新。
有没有其他方法可以加快 saga 的速度?
我正在考虑使用 DownloadId 作为 saga id,因为它已经是一个唯一的 guid。 saga 数据的Id 属性 是可以设置的,但是文档中明确指出你不应该自己设置id...
使用的传输:MSMQ
使用的持久化:RavenDB
NServiceBus 版本:5
我修改了设置,因此不再需要 saga。
在下载文件的过程中,我现在启动一个计时器在后台发送通知,当下载完成时我停止计时器。这工作得更快,导致发送的消息少得多。
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();
}
我有一个进程可以在并行线程中从远程位置下载文件。 每个线程在下载开始时发送一条消息,在下载完成时发送第二条消息。两条消息都有一个下载 ID 属性 (guid) 来关联两者。
接下来我有一个监控这些下载的 saga。它由 DownloadStarted 事件启动,并使用超时检测是否及时收到 DownloadEnded 事件。
我遇到的问题是,当在短时间内(1 分钟内下载 1000 个文件)下载大量文件时,saga 的性能不是很好。有的时候要半个多小时才能赶上。
我试图通过提供 IFindSagas 实现来加速 saga 查找。这并没有多大帮助,因为这导致 RavenDB 在 saga 数据中的 DownloadId 上创建一个自动索引,但也导致 FindBy 方法经常 return null 因为该索引没有及时更新。
有没有其他方法可以加快 saga 的速度? 我正在考虑使用 DownloadId 作为 saga id,因为它已经是一个唯一的 guid。 saga 数据的Id 属性 是可以设置的,但是文档中明确指出你不应该自己设置id...
使用的传输:MSMQ 使用的持久化:RavenDB NServiceBus 版本:5
我修改了设置,因此不再需要 saga。 在下载文件的过程中,我现在启动一个计时器在后台发送通知,当下载完成时我停止计时器。这工作得更快,导致发送的消息少得多。
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();
}