private TelemetrySpan StartSpanFromActivity(Activity activity, IOutgoingPhysicalMessageContext context)
        {
            context.Headers.TryGetValue(Headers.MessageIntent, out var intent);

            var routes = context.RoutingStrategies
                         .Select(r => r.Apply(context.Headers))
                         .Select(t =>
            {
                switch (t)
                {
                case UnicastAddressTag u:
                    return(u.Destination);

                case MulticastAddressTag m:
                    return(m.MessageType.Name);

                default:
                    return(null);
                }
            })
                         .ToList();

            var operationName = $"{intent ?? activity.OperationName} {string.Join(", ", routes)}";

            Tracer.StartActiveSpanFromActivity(operationName, activity, SpanKind.Producer, out var span);
            return(span);
        }
        /// <summary>
        /// Creates a <see cref="IRoutingContext" /> based on the current context.
        /// </summary>
        public static IRoutingContext CreateRoutingContext(this StageConnector<IOutgoingPhysicalMessageContext, IRoutingContext> stageConnector, OutgoingMessage outgoingMessage, IReadOnlyCollection<RoutingStrategy> routingStrategies, IOutgoingPhysicalMessageContext sourceContext)
        {
            Guard.AgainstNull(nameof(outgoingMessage), outgoingMessage);
            Guard.AgainstNull(nameof(routingStrategies), routingStrategies);
            Guard.AgainstNull(nameof(sourceContext), sourceContext);

            return new RoutingContext(outgoingMessage, routingStrategies, sourceContext);
        }
Example #3
0
 public void Enrich(Activity activity, IOutgoingPhysicalMessageContext context)
 {
     var routes = context.RoutingStrategies
                  .Select(r => r.Apply(context.Headers))
                  .Select(t => t switch
     {
         UnicastAddressTag u => u.Destination,
         MulticastAddressTag m => m.MessageType.FullName,
         _ => null
     })
        private static void SetSpanAttributes(Activity activity, IOutgoingPhysicalMessageContext context, TelemetrySpan span)
        {
            span.SetAttribute("messaging.message_id", context.MessageId);
            span.SetAttribute("messaging.message_payload_size_bytes", context.Body.Length);

            span.ApplyContext(context.Builder.Build <ReadOnlySettings>(), context.Headers);

            foreach (var tag in activity.Tags)
            {
                span.SetAttribute($"messaging.nservicebus.{tag.Key.ToLowerInvariant()}", tag.Value);
            }
        }
Example #5
0
    public static bool TryGet(
        IOutgoingPhysicalMessageContext context,
        [NotNullWhen(true)]
        out DedupePipelineState?state)
    {
        if (context.Extensions.TryGet(out DedupePipelineState found))
        {
            state = found;
            return(true);
        }

        state = null;
        return(false);
    }
        /// <summary>
        /// Creates a <see cref="IRoutingContext" /> based on the current context.
        /// </summary>
        public static IRoutingContext CreateRoutingContext(this StageConnector <IOutgoingPhysicalMessageContext, IRoutingContext> stageConnector, OutgoingMessage outgoingMessage, IReadOnlyCollection <RoutingStrategy> routingStrategies, IOutgoingPhysicalMessageContext sourceContext)
        {
            Guard.AgainstNull(nameof(outgoingMessage), outgoingMessage);
            Guard.AgainstNull(nameof(routingStrategies), routingStrategies);
            Guard.AgainstNull(nameof(sourceContext), sourceContext);

            return(new RoutingContext(outgoingMessage, routingStrategies, sourceContext));
        }
 public void Enrich(Activity activity, IOutgoingPhysicalMessageContext context)
 {
 }
        /// <summary>
        /// Returns the incoming physical message if there is one currently processed.
        /// </summary>
        public static bool TryGetIncomingPhysicalMessage(this IOutgoingPhysicalMessageContext context, out IncomingMessage message)
        {
            Guard.AgainstNull(nameof(context), context);

            return(context.Extensions.TryGet(out message));
        }