コード例 #1
0
        /// <summary>
        /// Processes a single queue item
        /// </summary>
        /// <param name="queueItem"></param>
        /// <param name="persistDocument"></param>
        /// <returns></returns>
        async Task ProcessSingleItem(InternalCosmosDBQueueItem queueItem, bool persistDocument)
        {
            // Persist document only if Auto complete is enabled
            persistDocument = persistDocument & this.settings.AutoComplete;

            try
            {
                var externalQueueItem = new CosmosDBQueueItem(this, queueItem);
                var handlerStatus     = await OnMessage(externalQueueItem);

                if (handlerStatus)
                {
                    if (this.settings.AutoComplete)
                    {
                        queueItem.SetAsComplete();
                    }

                    this.logger?.LogTrace($"Processing item {queueItem.id} succeeded");
                }
                else
                {
                    if (this.settings.AutoComplete)
                    {
                        queueItem.SetAsPending();
                        queueItem.errors++;
                    }

                    this.logger?.LogTrace($"Processing item {queueItem.id} failed");
                }
            }
            catch (Exception ex)
            {
                this.logger?.LogError(ex, $"Error processing queue item {queueItem.id}");

                queueItem.errors++;
                queueItem.SetAsPending();

                // If the message handler failed we saved as failed
                persistDocument = true;
            }

            if (persistDocument)
            {
                await SaveQueueItem(queueItem);
            }
        }
コード例 #2
0
 /// <summary>
 /// Completes the message queue
 /// </summary>
 /// <param name="queueItem"></param>
 /// <returns></returns>
 public async Task Complete(InternalCosmosDBQueueItem queueItem)
 {
     queueItem.SetAsComplete();
     await SaveQueueItem(queueItem);
 }