Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带有Azure服务总线的Hangfire 1分钟后重试作业_Azure_Azureservicebus_Hangfire - Fatal编程技术网

使用带有Azure服务总线的Hangfire 1分钟后重试作业

使用带有Azure服务总线的Hangfire 1分钟后重试作业,azure,azureservicebus,hangfire,Azure,Azureservicebus,Hangfire,我使用的是由SQL Server支持的Hangfire和Azure服务总线 我的Hangfire服务器配置如下所示: var hangfireServiceBusQueuePrefix = ConfigurationManager.AppSettings["HangfireServiceBusQueuePrefix"]; var azureServiceBusConnectionString = ConfigurationManager.ConnectionStrings["AzureServi

我使用的是由SQL Server支持的Hangfire和Azure服务总线

我的Hangfire服务器配置如下所示:

var hangfireServiceBusQueuePrefix = ConfigurationManager.AppSettings["HangfireServiceBusQueuePrefix"];
var azureServiceBusConnectionString = ConfigurationManager.ConnectionStrings["AzureServiceBus"].ConnectionString;

var serviceBusQueueOptions = new ServiceBusQueueOptions
{
    ConnectionString = azureServiceBusConnectionString,

    Queues = new[] { EnqueuedState.DefaultQueue },

    QueuePrefix = (hangfireServiceBusQueuePrefix.Equals("MachineName")
        ? Environment.MachineName
        : hangfireServiceBusQueuePrefix)
        + "-hangfire-"
};

var storage = new SqlServerStorage("Hangfire")
    .UseServiceBusQueues(serviceBusQueueOptions);

_hangfireConfiguration = GlobalConfiguration.Configuration
    .UseStorage(storage);
BackgroundJob.Enqueue(MyMethod);
我注意到,如果我的作业在1分钟后还没有完成,它将被重放-即使原始作业仍在运行

例如,当我将作业排队时,如下所示:

var hangfireServiceBusQueuePrefix = ConfigurationManager.AppSettings["HangfireServiceBusQueuePrefix"];
var azureServiceBusConnectionString = ConfigurationManager.ConnectionStrings["AzureServiceBus"].ConnectionString;

var serviceBusQueueOptions = new ServiceBusQueueOptions
{
    ConnectionString = azureServiceBusConnectionString,

    Queues = new[] { EnqueuedState.DefaultQueue },

    QueuePrefix = (hangfireServiceBusQueuePrefix.Equals("MachineName")
        ? Environment.MachineName
        : hangfireServiceBusQueuePrefix)
        + "-hangfire-"
};

var storage = new SqlServerStorage("Hangfire")
    .UseServiceBusQueues(serviceBusQueueOptions);

_hangfireConfiguration = GlobalConfiguration.Configuration
    .UseStorage(storage);
BackgroundJob.Enqueue(MyMethod);
如果我们想象
MyMethod
是这样的

public void MyMethod()
{
    Console.WriteLine("MyMethod Started");
    Thread.Sleep(TimeSpan.FromSeconds(90));
    Console.WriteLine("MyMethod Finished");
}
。。。发生的情况是,1分钟后,该方法将“重新启动” 30秒后,第一个实例将完成,然后第二个实例将在60秒后完成


我需要完成此作业,而不需要在一分钟后重新尝试。

当您收到消息时,消息会被锁定一段时间。这是为了避免另一个接收者收到相同的消息

您可以在创建队列时配置。 从文件中:

锁定持续时间的最大值为5分钟;默认值为1分钟


如果您需要锁定邮件超过5分钟,可以使用此方法手动增加锁定。

轻微的障碍是我无法使用Hangfire Azure服务总线库访问RenewLock方法。。。我不认为?更新锁在brokeredmessage上。你有权访问brokeredmessage吗?没有,已经全部打包好了。我将查看lib的源代码,看看是否有可以添加的内容