可以在NServiceBus中使用SQL Server传输运行长时间运行的进程吗?

时间:2019-05-27 14:44:04

标签: nservicebus long-running-processes

我在消息处理程序中运行的进程很长,我注意到在任务执行过程中无法从表中读取消息。

可以吗?

还是有更好的方法来处理长时间运行的进程?

我的传输方式是SQL Server。

预先感谢:)

public class HandlerAwaitsTheTask : IHandleMessages<CommandMessage>
{
    public async Task Handle(CommandMessage message, IMessageHandlerContext context)
    {
        await SomeLibrary.VeryVeryVeryLongTask(message);
    } 
}

1 个答案:

答案 0 :(得分:0)

这取决于。 :-)

“ VeryVeryVeryLong”要持续多长时间? 2分钟? 2小时? 2天? 哪个表被锁定?锁住整个桌子感觉有些不对劲。它几乎不可能成为队列,因为它只能锁定一或几行来提取消息。所以可能是您自己的桌子。

此外,该锁可能是可序列化的锁。这很可能是由分布式事务引起的。因此,也许您至少要使用不同的连接字符串,或者针对业务和NServiceBus数据使用不同的数据库。

这并不是说您绝对不能拥有很长的任务和很长的锁,但是取决于它的长短,SQL Server或其他事物可能会开始抱怨。吞吐量也可能受到限制。我们可能需要更多背景信息才能了解正在发生的事情和您的需要。

您也可以联系support@particular.net了解更多信息和支持。