-
Notifications
You must be signed in to change notification settings - Fork 119
Commit
Activity.Current is a static variable that uses AsyncLocal internally, which means that it flows into async calls, but not back out into the caller (message consumer and producer). As so, the activity.current is null after the produce and consume of the message, which means that all the spans created after it will be generate a new trace because the context is not being propagated.
- Loading branch information
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
namespace KafkaFlow | ||
{ | ||
/// <summary>Activity operation names enum values</summary> | ||
public enum ActivityOperationType | ||
{ | ||
/// <summary>PUBLISH</summary> | ||
Publish, | ||
|
||
/// <summary>PROCESS</summary> | ||
Process, | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
using System.Diagnostics; | ||
Check warning on line 1 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / Test deployment
Check warning on line 1 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / build
Check warning on line 1 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / build
Check warning on line 1 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / build
Check warning on line 1 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / build
|
||
using System.Reflection; | ||
Check warning on line 2 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / Test deployment
|
||
|
||
namespace KafkaFlow | ||
{ | ||
/// <summary> | ||
/// ActivitySource properties | ||
/// </summary> | ||
public static class ActivitySourceAccessor | ||
{ | ||
internal static readonly string Version = Assembly.GetExecutingAssembly().GetName().Version.ToString(); | ||
|
||
private const string _activityString = "otel_activity"; | ||
Check warning on line 13 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / Test deployment
|
||
|
||
private static readonly ActivitySource _activitySource = new("KafkaFlow.OpenTelemetry", Version); | ||
Check warning on line 15 in src/KafkaFlow.Abstractions/ActivitySourceAccessor.cs GitHub Actions / Test deployment
|
||
|
||
/// <summary> | ||
/// Gets the name of the OpenTelemetry Activity that is used as a key | ||
/// in MessageContext.Items dictionary | ||
/// </summary> | ||
public static string ActivityString => _activityString; | ||
|
||
/// <summary> | ||
/// Gets the ActivitySource name that is used in KafkaFlow | ||
/// </summary> | ||
public static ActivitySource ActivitySource => _activitySource; | ||
} | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
using System.Diagnostics; | ||
|
||
namespace KafkaFlow | ||
{ | ||
internal static class ActivityFactory | ||
{ | ||
public static Activity Start(string topicName, ActivityOperationType activityOperationType, ActivityKind activityKind) | ||
{ | ||
var activityName = !string.IsNullOrEmpty(topicName) ? $"{topicName} {activityOperationType}" : activityOperationType.ToString().ToLower(); | ||
|
||
// Start an activity with a name following the semantic convention of the OpenTelemetry messaging specification. | ||
// The convention also defines a set of attributes (in .NET they are mapped as `tags`) to be populated in the activity. | ||
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/messaging.md | ||
return ActivitySourceAccessor.ActivitySource.StartActivity(activityName, activityKind); | ||
} | ||
} | ||
} |