Пример #1
0
 /// <summary>
 /// Adds the message identifier tag.
 /// </summary>
 /// <param name="span">The span.</param>
 /// <param name="message">The message.</param>
 public static void AddMessageIdTag(this ISpan span, IQueueOutputMessage message)
 {
     if (message.SentMessage.MessageId.HasValue)
     {
         span.SetTag("MessageId", message.SentMessage.MessageId.Id.Value.ToString());
     }
 }
        /// <summary>
        /// Sends a new message to an existing queue
        /// </summary>
        /// <param name="messageToSend">The message to send.</param>
        /// <param name="data">The additional data.</param>
        /// <returns></returns>
        public IQueueOutputMessage Send(IMessage messageToSend, IAdditionalMessageData data)
        {
            IQueueOutputMessage result = null;

            if (_policy == null)
            {
                _policies.Registry.TryGet(_policies.Definition.SendMessage, out _policy);
            }

            if (_policy != null)
            {
                _policy.Execute(() => result = _handler.Send(messageToSend, data));
            }
            else //no policy found
            {
                result = _handler.Send(messageToSend, data);
            }
            return(result);
        }
        /// <summary>
        /// Sends a new message to an existing queue
        /// </summary>
        /// <param name="messageToSend">The message to send.</param>
        /// <param name="data">The additional data.</param>
        /// <returns></returns>
        public async Task <IQueueOutputMessage> SendAsync(IMessage messageToSend, IAdditionalMessageData data)
        {
            IQueueOutputMessage result = null;

            if (_policyAsync == null)
            {
                _policies.Registry.TryGet(_policies.Definition.SendMessageAsync, out _policyAsync);
            }

            if (_policyAsync != null)
            {
                await _policyAsync.ExecuteAsync(async() => result = await _handler.SendAsync(messageToSend, data).ConfigureAwait(false)).ConfigureAwait(false);
            }
            else //no policy found
            {
                result = await _handler.SendAsync(messageToSend, data).ConfigureAwait(false);
            }

            return(result);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="JobQueueOutputMessage" /> class.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <param name="status">The status.</param>
 public JobQueueOutputMessage(IQueueOutputMessage message, JobQueuedStatus status) : base(message.SentMessage, message.SendingException)
 {
     Status = status;
 }
Пример #5
0
        private IJobQueueOutputMessage ProcessResult(IScheduledJob job, DateTimeOffset scheduledTime, IQueueOutputMessage result)
        {
            //no errors, so just return
            if (!result.HasError)
            {
                return(new JobQueueOutputMessage(result, JobQueuedStatus.Success));
            }

            //this is not an error for the job already existing in the queue
            if (!JobAlreadyExistsError(result.SendingException))
            {
                return(new JobQueueOutputMessage(result, JobQueuedStatus.Failed));
            }

            var status = DoesJobExist(job.Name, scheduledTime);

            switch (status)
            {
            case QueueStatuses.Processing:
                return(new JobQueueOutputMessage(result, JobQueuedStatus.AlreadyQueuedProcessing));

            case QueueStatuses.Waiting:
                return(new JobQueueOutputMessage(result, JobQueuedStatus.AlreadyQueuedWaiting));

            case QueueStatuses.Processed:
                return(new JobQueueOutputMessage(result, JobQueuedStatus.AlreadyProcessed));

            case QueueStatuses.Error:
                DeleteJob(job.Name);
                return(null);

            default:
                return(null);    //try to re-queue once; if this is second try and this happens again, an error will be returned
            }
        }
Пример #6
0
        private IJobQueueOutputMessage ProcessResult(IScheduledJob job, DateTimeOffset scheduledTime, IQueueOutputMessage result)
        {
            //no errors, so just return
            if (!result.HasError) return new JobQueueOutputMessage(result, JobQueuedStatus.Success);

            //this is not an error for the job already existing in the queue
            if (!JobAlreadyExistsError(result.SendingException))
                return new JobQueueOutputMessage(result, JobQueuedStatus.Failed);

            var status = DoesJobExist(job.Name, scheduledTime);
            switch (status)
            {
                case QueueStatuses.Processing:
                    return new JobQueueOutputMessage(result, JobQueuedStatus.AlreadyQueuedProcessing);
                case QueueStatuses.Waiting:
                    return new JobQueueOutputMessage(result, JobQueuedStatus.AlreadyQueuedWaiting);
                case QueueStatuses.Processed:
                    return new JobQueueOutputMessage(result, JobQueuedStatus.AlreadyProcessed);
                case QueueStatuses.Error:
                    DeleteJob(job.Name);
                    return null;
                default:
                    return null; //try to re-queue once; if this is second try and this happens agian, an error will be returned
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="JobQueueOutputMessage" /> class.
 /// </summary>
 /// <param name="message">The message.</param>
 /// <param name="status">The status.</param>
 public JobQueueOutputMessage(IQueueOutputMessage message, JobQueuedStatus status): base(message.SentMessage, message.SendingException)
 {
     Status = status;
 }