Esempio n. 1
0
        public GetEnvelopeResult TryGetMessage()
        {
            CloudQueueMessage message;

            try
            {
                message = this._queue.GetMessage(this._visibilityTimeout);
            }
            catch (ThreadAbortException)
            {
                // we are stopping
                return(GetEnvelopeResult.Empty);
            }
            catch (Exception ex)
            {
                SystemObserver.Notify(new FailedToReadMessage(ex, this._queueName));
                return(GetEnvelopeResult.Error());
            }

            if (null == message)
            {
                return(GetEnvelopeResult.Empty);
            }

            try
            {
                var unpacked = this.DownloadPackage(message);
                return(GetEnvelopeResult.Success(unpacked));
            }
            catch (StorageException ex)
            {
                SystemObserver.Notify(new FailedToAccessStorage(ex, this._queue.Name, message.Id));
                return(GetEnvelopeResult.Retry);
            }
            catch (Exception ex)
            {
                SystemObserver.Notify(new MessageInboxFailed(ex, this._queue.Name, message.Id));
                // new poison details
                this._posionQueue.Value.AddMessage(message);
                this._queue.DeleteMessage(message);
                return(GetEnvelopeResult.Retry);
            }
        }
Esempio n. 2
0
        public GetEnvelopeResult TryGetMessage()
        {
            FileInfo message;

            try
            {
                message = _queue.EnumerateFiles().FirstOrDefault();
            }
            catch (Exception ex)
            {
                _observer.Notify(new FailedToReadMessage(ex, _queueName));
                return(GetEnvelopeResult.Error());
            }

            if (null == message)
            {
                return(GetEnvelopeResult.Empty);
            }

            try
            {
                var unpacked = DownloadPackage(message);
                return(GetEnvelopeResult.Success(unpacked));
            }
            catch (IOException ex)
            {
                // this is probably sharing violation, no need to
                // scare people.
                if (!IsSharingViolation(ex))
                {
                    _observer.Notify(new FailedToAccessStorage(ex, _queue.Name, message.Name));
                }
                return(GetEnvelopeResult.Retry);
            }
            catch (Exception ex)
            {
                _observer.Notify(new EnvelopeDeserializationFailed(ex, _queue.Name, message.Name));
                // new poison details
                var poisonFile = Path.Combine(_posionQueue.Value.FullName, message.Name);
                message.MoveTo(poisonFile);
                return(GetEnvelopeResult.Retry);
            }
        }
Esempio n. 3
0
        public GetEnvelopeResult TryGetMessage()
        {
            CloudQueueMessage message;

            try
            {
                message = _queue.GetMessage(_visibilityTimeout);
            }
            catch (Exception ex)
            {
                _observer.Notify(new FailedToReadMessage(ex, _queueName));
                return(GetEnvelopeResult.Error());
            }

            if (null == message)
            {
                return(GetEnvelopeResult.Empty);
            }

            try
            {
                var unpacked = DownloadPackage(message);
                return(GetEnvelopeResult.Success(unpacked));
            }
            catch (StorageClientException ex)
            {
                _observer.Notify(new FailedToAccessStorage(ex, _queue.Name, message.Id));
                return(GetEnvelopeResult.Retry);
            }
            catch (Exception ex)
            {
                _observer.Notify(new EnvelopeDeserializationFailed(ex, _queue.Name, message.Id));
                // new poison details
                _posionQueue.Value.AddMessage(message);
                _queue.DeleteMessage(message);
                return(GetEnvelopeResult.Retry);
            }
        }