Hangfire DistributedLockTimeoutException beim gleichzeitigen Aufruf derselben statischen MethodeC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Hangfire DistributedLockTimeoutException beim gleichzeitigen Aufruf derselben statischen Methode

Post by Anonymous »

Ich habe einen Webdienst, der beim Posten das Herunterladen von Bildern in Hangfire in die Warteschlange stellt, sodass Hangfire es automatisch erneut versucht, wenn der Bilddownload fehlschlägt:

Code: Select all

[AutomaticRetry(Attempts = 5, OnAttemptsExceeded = AttemptsExceededAction.Delete)]
public static void DownloadImage(string url)
{
...
}
Jedes Mal, wenn der Webdienst gepostet wird, fügt er eine Reihe von Hintergrundjobs hinzu, die diese Methode wie folgt aufrufen:

Code: Select all

Hangfire.BackgroundJob.Enqueue(() => Downloader.DownloadImage(o.SourceURL));
Was ich jedoch sehe, ist, dass der erste der Hintergrundjobs erfolgreich ist und der Rest in SCHNELLER Folge fehlschlägt, d. h. in weniger als einer Sekunde scheitern beispielsweise 100 in der Warteschlange befindliche Jobs fünfmal an ihren zugewiesenen Aufgaben (laut AutomaticRetry-Attribut)

Der Fehler in den Hangfire-Aufgaben ist:

Code: Select all

Hangfire.Storage.DistributedLockTimeoutException

Timeout expired. The timeout elapsed prior to obtaining a distributed lock on the 'HangFire:Downloader.DownloadImage' resource.

Hangfire.Storage.DistributedLockTimeoutException: Timeout expired. The timeout elapsed prior to obtaining a distributed lock on the 'HangFire:Downloader.DownloadImage' resource.
at Hangfire.SqlServer.SqlServerDistributedLock.Acquire(IDbConnection connection, String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerDistributedLock..ctor(SqlServerStorage storage, String resource, TimeSpan timeout)
at Hangfire.SqlServer.SqlServerConnection.AcquireDistributedLock(String resource, TimeSpan timeout)
at Hangfire.DisableConcurrentExecutionAttribute.OnPerforming(PerformingContext filterContext)
at Hangfire.Server.BackgroundJobPerformer.InvokePerformFilter(IServerFilter filter, PerformingContext preContext, Func`1 continuation)

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post