/// <summary>
        /// Called before a message is dispatched to any consumers. Sets the <see cref="MassTransitContext"/>.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="context"></param>
        /// <returns></returns>
        public Task PreConsume <T>(ConsumeContext <T> context) where T : class
        {
            var parentActivityId = context.Headers?.Get(Constants.ActivityIdHeader, string.Empty);
            var activity         = new System.Diagnostics.Activity(Constants.ConsumeActivityName);

            if (!string.IsNullOrEmpty(parentActivityId))
            {
                activity.SetParentId(parentActivityId);
            }

            var baggage = context.Headers?.Get <IEnumerable <KeyValuePair <string, string> > >(Constants.BaggageHeader);

            if (baggage?.Any() ?? false)
            {
                foreach (var item in baggage)
                {
                    activity.AddBaggage(item.Key, item.Value);
                }
            }

            activity.Start();
            _tracer?.StartSpanFromActivity(Constants.SpanConsumeOperationNamePrefix, activity, SpanKind.Consumer);

            return(Task.CompletedTask);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Invoke Grain call context.
        /// </summary>
        /// <param name="context">The <see cref="IOutgoingGrainCallContext"/>.</param>
        /// <returns>A <see cref="Task"/>.</returns>
        public async Task Invoke(IIncomingGrainCallContext context)
        {
            var activity = new System.Diagnostics.Activity(OrleansDistributedTracingConstants.IncomingGrainFilterActivityName);

            if (RequestContext.Get(Constants.ActivityHeader) is string traceId)
            {
                activity.SetParentId(traceId);
            }

            if (RequestContext.Get(Constants.BaggageHeader) is IEnumerable <KeyValuePair <string, string> > baggage)
            {
                foreach (var item in baggage)
                {
                    activity.AddBaggage(item.Key, item.Value);
                }
            }

            activity.Start();

            await context.Invoke();

            activity.Stop();
        }