Azure Service Bus, bestimmen Sie, ob OnMessage die Verarbeitung beendet

Mit Azure ServiceBus und dem OnMessage-Aufruf suche ich nach einer Möglichkeit, festzustellen, ob die OnMessage-Ereignispumpe nicht mehr aus der Warteschlange liest.

Unsere Verbindung zu OnMessage ist wie folgt konfiguriert:

protected virtual void DoSubscription(string queueName, Func<QueueRequest, bool> callback)
{
    var client = GetClient(queueName, PollingTimeout);
    var transformCallback = new Action<BrokeredMessage>((message) =>
    {
        try
        {
            var request = message.ToQueueRequest();
            if (callback(request))
            {
                message.Complete();
            }
            else
            {
                message.Abandon();
                Log.Warn("DoSubscription: Message Failed to Process Gracefully: {0}{1}", Environment.NewLine, JsonConvert.SerializeObject(request));
            }
        }
        catch (Exception ex)
        {
            Log.Error("DoSubscription: Message Failed to Process With Exception:", ex);
            message.Abandon();
        }
    });
    var options = new OnMessageOptions
    {
        MaxConcurrentCalls = _config.GetInt("MaxThreadsPerQueue"),
        AutoComplete = false,
        AutoRenewTimeout = new TimeSpan(0,0,1)
    };
    options.ExceptionReceived += OnMessageError;
    client.OnMessage(transformCallback, options);
}

Das Problem, auf das wir stoßen, besteht darin, dass nach einer bestimmten Zeit keine Nachrichten in die Warteschlange gestellt werden. In der Warteschlange befindliche neue Nachrichten werden von der OnMessage-Ereignispumpe erst nach einem Neustart der Anwendung erfasst.

Ich weiß, dass es Möglichkeiten gibt, dies mithilfe von Worker-Rollen zu tun. Zu Überwachungs- und Verwaltungszwecken haben wir uns jedoch entschlossen, dies im Anwendungsstart einer Web-App zu implementieren.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage