Example #1
0
        private void HandleMessageAsync(X processingMessage, int retryTimes)
        {
            var message = processingMessage.Message;

            _ioHelper.TryAsyncActionRecursively <AsyncTaskResult <int> >("GetPublishedVersionAsync",
                                                                         () => _publishedVersionStore.GetPublishedVersionAsync(Name, message.AggregateRootTypeCode, message.AggregateRootId),
                                                                         currentRetryTimes => HandleMessageAsync(processingMessage, currentRetryTimes),
                                                                         result =>
            {
                var publishedVersion = result.Data;
                if (publishedVersion + 1 == message.Version)
                {
                    DispatchProcessingMessageAsync(processingMessage, 0);
                }
                else if (publishedVersion + 1 < message.Version)
                {
                    _logger.DebugFormat("The sequence message cannot be process now as the version is not the next version, it will be handle later. contextInfo [aggregateRootId={0},lastPublishedVersion={1},messageVersion={2}]", message.AggregateRootId, publishedVersion, message.Version);
                    processingMessage.AddToWaitingList();
                }
                else
                {
                    processingMessage.Complete(default(Z));
                }
            },
                                                                         () => string.Format("sequence message [messageId:{0}, messageType:{1}, aggregateRootId:{2}, aggregateRootVersion:{3}]", message.Id, message.GetType().Name, message.AggregateRootId, message.Version),
                                                                         null,
                                                                         retryTimes,
                                                                         true);
        }