如何在负载下提高my NServiceBus Saga的性能

如何在负载下提高my NServiceBus Saga的性能,nservicebus,saga,nservicebus-sagas,nservicebus7,Nservicebus,Saga,Nservicebus Sagas,Nservicebus7,我用NSB7构建了一个非常简单的传奇,它使用SQL传输和NHibernate持久性 Saga监听队列,接收到的每条消息都通过4个处理程序执行。它们是按顺序调用的,两个处理程序并行运行,最后一个处理程序只在两个并行处理程序完成后运行。最后一个处理程序将记录写入数据库 假设对于单个消息,每个处理程序需要1秒。当接收到一条新消息时,这将开始这段传奇,预期结果是3-4秒后,记录将写入数据库 如果队列备份了1000条消息,那么一旦它们再次开始处理,在最后一个处理程序中创建新记录大约需要2000秒。基本上,

我用NSB7构建了一个非常简单的传奇,它使用SQL传输和NHibernate持久性

Saga监听队列,接收到的每条消息都通过4个处理程序执行。它们是按顺序调用的,两个处理程序并行运行,最后一个处理程序只在两个并行处理程序完成后运行。最后一个处理程序将记录写入数据库

假设对于单个消息,每个处理程序需要1秒。当接收到一条新消息时,这将开始这段传奇,预期结果是3-4秒后,记录将写入数据库

如果队列备份了1000条消息,那么一旦它们再次开始处理,在最后一个处理程序中创建新记录大约需要2000秒。基本上,它们不是为每条消息运行预期的4秒处理时间,而是有效地聚集在初始处理程序中,直到队列被清空,然后为下一个处理程序再次执行此操作

我有什么想法可以改进这个系统在负载下的性能,使处理后的消息流不断地从一端出来,而不是在一条新记录从另一端出来之前的一堆消息和长时间延迟

谢谢
Will

有关于saga并发问题的文档:

但我仍然不完全理解这个问题。每个实例化传奇的消息都应该在消息处理后在数据库中创建一条记录。在1000条信息之后。NServiceBus还将如何保证一致性


其次,您可能不应该让4个处理程序处理单个消息。如果确实需要这样工作,请使用发布/订阅并创建不同的端点。应尽快完成saga处理,尤其是在高负载情况下。

查看ServicePulse监控,并尝试找出造成延迟的原因,您可能会发现由于并发异常,您有很多次重试?如果是这种情况,您可能希望重新访问您的设计。是的,已选中ServcePulse,它显示没有重试,只确认所有1000条消息在移动到第二个处理程序之前完成了第一个处理程序。最好打开一个支持的案例suport@particular.net,