使用带有DTC的MSMQ时,1分钟后Hangfire作业会自动重新安排

时间:2016-05-24 14:01:04

标签: c# msmq hangfire

我正在使用Hangfire 1.5.6与MSMQ和DTC事务(为了使用远程MSMQ)。问题是每个长时间运行的作业(> 1分钟)在1分钟后自动重新安排。这也是以奇怪的顺序完成的:在取消旧作业之前再次启动作业。

如果我将Hangfire配置为不使用DTC事务,则作业正常运行。

在源代码中,我注意到MsmqDtcTransaction正在打开TransactionScope。在作业执行期间是否需要打开此范围?对于长时间运行的作业,SQL Server事务日志会发生什么(这个特定的工作是将大量数据插入到DB中)?

我尝试过在app.config中设置事务超时(这也需要在machine.config中进行更改):

<system.transactions>
<machineSettings maxTimeout="02:00:00"/>
<defaultSettings timeout="02:00:00" />
</system.transactions>

通过这些更改,作业在DTC事务上运行正常。

这是Hangfire如何与远程MSMQ一起使用?它可以在没有交易的情况下使用吗?

1 个答案:

答案 0 :(得分:0)

Hangfire作者已在1.6.3中检查了此修复程序:Hangfire Forums

来自Hangfire源代码:

Response

public MsmqDtcTransaction()
{
   _scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.Zero);
}