我将 rebus 3.1.5 与 rebus.rabbitmq 3.0.0 和 rabbitmq.client 4.1.1 一起使用。我已配置为使用简单的重试策略,最多 2 次传递尝试。如果抛出异常,我想重试该消息。我不使用事务范围。但是当抛出异常时,我不会再次重新传递消息(它甚至不在错误队列中)
如果这是不可能的,并且如果我需要使用 HandleMessagesInsideTransactionScope 配置 rebus,它是否会锁定我的数据库,直到我完成处理程序工作?
非常感谢!
编辑:这是处理程序的样子:
public Task Handle(SetCreditInfoCommand command)
{
return Task.Run(() => {
var loanApplication = _loanApplicationRepository.Get(command.LoanApplicationId);
try {
//something that throws an exception here
}
catch(Exception ex)
{
throw ex;
}
});
}
这就是总线的配置方式:
var bus = Configure.With(adapter)
.Transport(t => t.UseRabbitMq(connectionString, queueName))
.Options(b => b.SimpleRetryStrategy(
maxDeliveryAttempts: 2,
secondLevelRetriesEnabled: true,
errorQueueAddress: queueName + "_error"
))
.Timeouts(t => t.StoreInSqlServer(dbConnection, "RebusTimeouts", false))
.Start();
IoC.GetContainerBuilder().RegisterInstance(bus).As<IBus>();