private Activity?StartActivity(IIncomingPhysicalMessageContext context)
        {
            if (!context.MessageHeaders.TryGetValue(Headers.TraceParentHeaderName, out var parentId))
            {
                context.MessageHeaders.TryGetValue(Headers.RequestIdHeaderName, out parentId);
            }

            string?traceStateString = default;
            List <KeyValuePair <string, string?> > baggageItems = new();

            if (!string.IsNullOrEmpty(parentId))
            {
                if (context.MessageHeaders.TryGetValue(Headers.TraceStateHeaderName, out var traceState))
                {
                    traceStateString = traceState;
                }

                if (context.MessageHeaders.TryGetValue(Headers.BaggageHeaderName, out var baggageValue) ||
                    context.MessageHeaders.TryGetValue(Headers.CorrelationContextHeaderName, out baggageValue))
                {
                    var baggage = baggageValue.Split(',');
                    if (baggage.Length > 0)
                    {
                        foreach (var item in baggage)
                        {
                            if (NameValueHeaderValue.TryParse(item, out var baggageItem))
                            {
                                baggageItems.Add(new KeyValuePair <string, string?>(baggageItem.Name, HttpUtility.UrlDecode(baggageItem.Value)));
                            }
                        }
                    }
                }
            }

            var activity = parentId == null
                ? NServiceBusActivitySource.ActivitySource.StartActivity(ActivityNames.IncomingPhysicalMessage, ActivityKind.Consumer)
                : NServiceBusActivitySource.ActivitySource.StartActivity(ActivityNames.IncomingPhysicalMessage, ActivityKind.Consumer, parentId);

            if (activity == null)
            {
                return(activity);
            }

            activity.TraceStateString = traceStateString;

            _activityEnricher.Enrich(activity, context);

            foreach (var baggageItem in baggageItems)
            {
                activity.AddBaggage(baggageItem.Key, baggageItem.Value);
            }

            return(activity);
        }
Exemplo n.º 2
0
        private Activity?StartActivity(IOutgoingPhysicalMessageContext context)
        {
            var activity = NServiceBusActivitySource.ActivitySource.StartActivity(ActivityNames.OutgoingPhysicalMessage, ActivityKind.Producer);

            if (activity == null)
            {
                return(activity);
            }

            _activityEnricher.Enrich(activity, context);

            return(activity);
        }