Ich benutze Windows Azur Service Bus für Messaging. Wir haben eine Web-API erstellt, um die Nachrichten vom Servicebus zu holen. Die mobile App verwendet diese Web-API zum Abrufen von Nachrichten. Wir verwenden den PeekLock-Modus im Abonnement-Client und die Lockduration beträgt 5 Minuten.LockToken läuft vor LockUntilUtc Zeit in azurem Service-Bus
Auf Client-Seite, wenn Nachrichten mehr als 5 Minuten dauern dann zu verarbeiten Nachricht entsperrt. Also bevor wir es entsperren wollen wir das Lock erneuern. Also haben wir eine andere Web-API erstellt, um das Schloss zu erneuern. In der Web-API übergeben wir den LockToken. Wenn wir jedoch subscriptionClient.RenewMessageLockAsync (new Guid (lockToken)) verwenden, gibt es den Fehler "Die angegebene Sperre ist ungültig. Entweder ist die Sperre abgelaufen oder die Nachricht wurde bereits vor Ablauf der Sperrzeit aus der Warteschlange entfernt". Wir führen die Erneuerungssperre vor 1,5 Minuten der Nachricht LockUntilUtc-Zeit ein.
Meine Frage ist, können wir die Nachricht Sperre erneuern, bevor es ExpiryTime? Und wenn ja, warum azurblauen Service Bus werfen Sperre abgelaufen Fehler? Bitte hilf mir, diese Dinge zu verstehen.
Hallo Sean, Danke für die Antwort. Ich kann die Methode subscriptionClient.OneMessage nicht verwenden, da sie ereignisgesteuert ist. Deshalb verwende ich receive Methode, damit ich nicht die ganze Nachricht in einer while Schleife erhalten und zurück zum Benutzer senden kann. –
Die Sperre aus dem Code manuell zu erneuern, der die eingehende Nachricht verarbeitet, sollte funktionieren. Neugierig, warum machst du es von einem anderen Prozess und nicht derselbe, der die Nachricht behandelt? –
Hallo Sean, ich kann dies nicht tun, da die Nachrichten von iPad-Anwendung verbrauchen und es gibt keine direkte API für objektive C oder Swift. Deshalb habe ich Rest Web-API erstellt, anstatt azurblauen Service Bus Rest api zu verwenden. –