Exemplo n.º 1
0
        private async Task <(bool, OperateResult)> SendWithoutRetryAsync(PublishedMessage message)
        {
            var startTime = DateTimeOffset.UtcNow;
            var stopwatch = Stopwatch.StartNew();

            var tracingResult = TracingBefore(message.Name, message.Content);
            var operationId   = tracingResult.Item1;

            var sendValues = tracingResult.Item2 != null
                ? CommonHelper.AddTracingHeaderProperty(message.Content, tracingResult.Item2)
                : message.Content;

            var result = await PublishAsync(message.Name, sendValues);

            stopwatch.Stop();
            if (result.Succeeded)
            {
                await SetSuccessfulState(message);

                TracingAfter(operationId, message.Name, sendValues, startTime, stopwatch.Elapsed);

                return(false, OperateResult.Success);
            }
            else
            {
                TracingError(operationId, message, result, startTime, stopwatch.Elapsed);

                var needRetry = await SetFailedState(message, result.Exception);

                return(needRetry, OperateResult.Failed(result.Exception));
            }
        }