我在消息处理程序中运行的进程很长,我注意到在任务执行过程中无法从表中读取消息。
可以吗?
还是有更好的方法来处理长时间运行的进程?
我的传输方式是SQL Server。
预先感谢:)
public class HandlerAwaitsTheTask : IHandleMessages<CommandMessage>
{
public async Task Handle(CommandMessage message, IMessageHandlerContext context)
{
await SomeLibrary.VeryVeryVeryLongTask(message);
}
}
答案 0 :(得分:0)
这取决于。 :-)
“ VeryVeryVeryLong”要持续多长时间? 2分钟? 2小时? 2天? 哪个表被锁定?锁住整个桌子感觉有些不对劲。它几乎不可能成为队列,因为它只能锁定一或几行来提取消息。所以可能是您自己的桌子。
此外,该锁可能是可序列化的锁。这很可能是由分布式事务引起的。因此,也许您至少要使用不同的连接字符串,或者针对业务和NServiceBus数据使用不同的数据库。
这并不是说您绝对不能拥有很长的任务和很长的锁,但是取决于它的长短,SQL Server或其他事物可能会开始抱怨。吞吐量也可能受到限制。我们可能需要更多背景信息才能了解正在发生的事情和您的需要。
您也可以联系support@particular.net了解更多信息和支持。