我正在使用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一起使用?它可以在没有交易的情况下使用吗?
答案 0 :(得分:0)
Hangfire作者已在1.6.3中检查了此修复程序:Hangfire Forums
来自Hangfire源代码:
Response
和
public MsmqDtcTransaction()
{
_scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.Zero);
}