Beispiel #1
0
        /// <summary>
        /// Receives a <see cref="IList{Message}"/> of deferred messages identified by <paramref name="sequenceNumbers"/>.
        /// </summary>
        ///
        /// <param name="sequenceNumbers">An <see cref="IEnumerable{T}"/> containing the sequence numbers to receive.</param>
        /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param>
        ///
        /// <returns>Messages identified by sequence number are returned. Returns null if no messages are found.
        /// Throws if the messages have not been deferred.</returns>
        /// <seealso cref="DeferAsync(ServiceBusReceivedMessage, IDictionary{string, object}, CancellationToken)"/>
        /// <seealso cref="DeferAsync(string, IDictionary{string, object}, CancellationToken)"/>
        public virtual async Task <IList <ServiceBusReceivedMessage> > ReceiveDeferredMessageBatchAsync(
            IEnumerable <long> sequenceNumbers,
            CancellationToken cancellationToken = default)
        {
            Argument.AssertNotClosed(IsDisposed, nameof(ServiceBusReceiver));
            Argument.AssertNotNullOrEmpty(sequenceNumbers, nameof(sequenceNumbers));
            cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>();
            var sequenceNumbersList = sequenceNumbers.ToList();

            Logger.ReceiveDeferredMessageStart(Identifier, sequenceNumbersList.Count, sequenceNumbersList);
            using DiagnosticScope scope = _scopeFactory.CreateScope(DiagnosticProperty.ReceiveDeferredActivityName);
            scope.AddAttribute(
                DiagnosticProperty.SequenceNumbersAttribute,
                string.Join(",", sequenceNumbers));
            scope.Start();

            IList <ServiceBusReceivedMessage> deferredMessages = null;

            try
            {
                deferredMessages = await InnerReceiver.ReceiveDeferredMessageBatchAsync(
                    sequenceNumbersList,
                    cancellationToken).ConfigureAwait(false);
            }
            catch (Exception exception)
            {
                Logger.ReceiveDeferredMessageException(Identifier, exception.ToString());
                scope.Failed(exception);
                throw;
            }

            Logger.ReceiveDeferredMessageComplete(Identifier, deferredMessages.Count);
            scope.SetMessageData(deferredMessages);
            return(deferredMessages);
        }
Beispiel #2
0
        /// <summary>
        /// Receives a <see cref="IList{Message}"/> of deferred messages identified by <paramref name="sequenceNumbers"/>.
        /// </summary>
        ///
        /// <param name="sequenceNumbers">An <see cref="IEnumerable{T}"/> containing the sequence numbers to receive.</param>
        /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param>
        ///
        /// <returns>Messages identified by sequence number are returned. Returns null if no messages are found.
        /// Throws if the messages have not been deferred.</returns>
        /// <seealso cref="DeferAsync(ServiceBusReceivedMessage, IDictionary{string, object}, CancellationToken)"/>
        /// <seealso cref="DeferAsync(string, IDictionary{string, object}, CancellationToken)"/>
        public virtual async Task <IList <ServiceBusReceivedMessage> > ReceiveDeferredMessageBatchAsync(
            IEnumerable <long> sequenceNumbers,
            CancellationToken cancellationToken = default)
        {
            Argument.AssertNotClosed(IsDisposed, nameof(ServiceBusReceiver));
            Argument.AssertNotNullOrEmpty(sequenceNumbers, nameof(sequenceNumbers));
            cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>();
            var sequenceNumbersList = sequenceNumbers.ToList();

            ServiceBusEventSource.Log.ReceiveDeferredMessageStart(Identifier, sequenceNumbersList.Count, sequenceNumbersList);

            IList <ServiceBusReceivedMessage> deferredMessages = null;

            try
            {
                deferredMessages = await InnerReceiver.ReceiveDeferredMessageBatchAsync(
                    sequenceNumbersList,
                    cancellationToken).ConfigureAwait(false);
            }
            catch (Exception exception)
            {
                ServiceBusEventSource.Log.ReceiveDeferredMessageException(Identifier, exception);
                throw;
            }

            cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>();
            ServiceBusEventSource.Log.ReceiveDeferredMessageStop(Identifier, sequenceNumbersList.Count);
            return(deferredMessages);
        }
 /// <summary>
 /// Receives a <see cref="IList{Message}"/> of deferred messages identified by <paramref name="sequenceNumbers"/>.
 /// </summary>
 /// <param name="sequenceNumbers">An <see cref="IEnumerable{T}"/> containing the sequence numbers to receive.</param>
 /// <param name="cancellationToken"></param>
 /// <returns>Messages identified by sequence number are returned. Returns null if no messages are found.
 /// Throws if the messages have not been deferred.</returns>
 /// <seealso cref="DeferAsync"/>
 public virtual async Task <IList <ServiceBusReceivedMessage> > ReceiveDeferredMessageBatchAsync(
     IEnumerable <long> sequenceNumbers,
     CancellationToken cancellationToken = default)
 {
     return(await _innerReceiver.ReceiveDeferredMessageBatchAsync(
                sequenceNumbers,
                cancellationToken).ConfigureAwait(false));
 }