Exemplo n.º 1
0
        /// <summary>
        /// Получить сквозной идентификатор.
        /// </summary>
        /// <param name="properties">Свойства сообщения.</param>
        /// <param name="traceIdFromBody">TraceId из тела сообщения.</param>
        /// <param name="traceId">Сквозной идентификатор.</param>
        /// <param name="traceIdSource">Строка-результат.</param>
        internal static bool TryGetTraceInfo(
            this IBasicProperties properties,
            Guid?traceIdFromBody,
            out Guid?traceId,
            out string?traceIdSource
            )
        {
            traceIdSource = null;
            traceId       = null;
            var traceIdResult = TryGetFromCorrelationId(properties) ??
                                TryGetFromHeaders(properties) ??
                                traceIdFromBody;

            if (traceIdResult.HasValue && traceIdResult != Guid.Empty)
            {
                traceId = traceIdResult;
                var traceIdSourceResult = properties.TryGetHeaderValue(TRACE_ID_SOURCE_KEY, out var traceIdSourceByteArray);
                traceIdSource = traceIdSourceResult
                    ? Encoding.UTF8.GetString(traceIdSourceByteArray)
                    : "FromMessage";

                return(true);
            }
            return(false);