diff --git a/Datadog.Trace.Samples.g.sln b/Datadog.Trace.Samples.g.sln
index 893076ff205d..8840be4a2fd8 100644
--- a/Datadog.Trace.Samples.g.sln
+++ b/Datadog.Trace.Samples.g.sln
@@ -457,6 +457,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.LifetimeManager.Ter
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.MassTransit7", "tracer\test\test-applications\integrations\Samples.MassTransit7\Samples.MassTransit7.csproj", "{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.MassTransit8", "tracer\test\test-applications\integrations\Samples.MassTransit8\Samples.MassTransit8.csproj", "{962B244A-C821-40BA-B4D1-D5AB27493E30}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Ocelot.DistributedTracing", "tracer\test\test-applications\integrations\Samples.Ocelot.DistributedTracing\Samples.Ocelot.DistributedTracing.csproj", "{08C6510D-42DC-C8B4-CC79-26349F2D6DBB}"
EndProject
Global
@@ -1113,6 +1115,10 @@ Global
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Release|Any CPU.Build.0 = Release|Any CPU
{08C6510D-42DC-C8B4-CC79-26349F2D6DBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{08C6510D-42DC-C8B4-CC79-26349F2D6DBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{08C6510D-42DC-C8B4-CC79-26349F2D6DBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -1301,6 +1307,7 @@ Global
{021D714E-1764-D76B-15B5-C9114FE934C2} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
{0E3E1069-80FF-99C9-D29F-936D96D5F516} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
+ {962B244A-C821-40BA-B4D1-D5AB27493E30} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
{08C6510D-42DC-C8B4-CC79-26349F2D6DBB} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
EndGlobalSection
EndGlobal
diff --git a/Datadog.Trace.sln b/Datadog.Trace.sln
index fe361b938bfb..f33263d512c1 100644
--- a/Datadog.Trace.sln
+++ b/Datadog.Trace.sln
@@ -641,6 +641,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.LifetimeManager.Ter
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.MassTransit7", "tracer\test\test-applications\integrations\Samples.MassTransit7\Samples.MassTransit7.csproj", "{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.MassTransit8", "tracer\test\test-applications\integrations\Samples.MassTransit8\Samples.MassTransit8.csproj", "{962B244A-C821-40BA-B4D1-D5AB27493E30}"
+EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.Ocelot.DistributedTracing", "tracer\test\test-applications\integrations\Samples.Ocelot.DistributedTracing\Samples.Ocelot.DistributedTracing.csproj", "{08C6510D-42DC-C8B4-CC79-26349F2D6DBB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Datadog.AutoInstrumentation.Generator.Core", "tracer\src\Datadog.AutoInstrumentation.Generator.Core\Datadog.AutoInstrumentation.Generator.Core.csproj", "{B3A07CA3-3536-4D43-81A3-A5A73FB76F22}"
@@ -1573,6 +1575,10 @@ Global
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {962B244A-C821-40BA-B4D1-D5AB27493E30}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -1829,6 +1835,7 @@ Global
{08C6510D-42DC-C8B4-CC79-26349F2D6DBB} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
{B3A07CA3-3536-4D43-81A3-A5A73FB76F22} = {9E5F0022-0A50-40BF-AC6A-C3078585ECAB}
{A1B2C3D4-E5F6-4A5B-8C9D-1E2F3A4B5C6D} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
+ {962B244A-C821-40BA-B4D1-D5AB27493E30} = {BAF8F246-3645-42AD-B1D0-0F7EAFBAB34A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {160A1D00-1F5B-40F8-A155-621B4459D78F}
diff --git a/tracer/build/PackageVersionsGeneratorDefinitions.json b/tracer/build/PackageVersionsGeneratorDefinitions.json
index 600ce6c3a357..8f34bf725fe6 100644
--- a/tracer/build/PackageVersionsGeneratorDefinitions.json
+++ b/tracer/build/PackageVersionsGeneratorDefinitions.json
@@ -9,6 +9,16 @@
"7.*.*"
]
},
+ {
+ "IntegrationName": "MassTransit8",
+ "SampleProjectName": "Samples.MassTransit8",
+ "NugetPackageSearchName": "MassTransit",
+ "MinVersion": "8.0.4",
+ "MaxVersionExclusive": "9.0.0",
+ "SpecificVersions": [
+ "8.*.*"
+ ]
+ },
{
"IntegrationName": "Hangfire",
"SampleProjectName": "Samples.Hangfire",
diff --git a/tracer/build/PackageVersionsLatestMajors.g.props b/tracer/build/PackageVersionsLatestMajors.g.props
index 4fc8d03f7abd..8215fc98eb2b 100644
--- a/tracer/build/PackageVersionsLatestMajors.g.props
+++ b/tracer/build/PackageVersionsLatestMajors.g.props
@@ -72,6 +72,66 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
All
Samples.MassTransit7
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
ApiVersion=1.8.23;RestoreRecursive=false;BuildProjectReferences=false
diff --git a/tracer/build/PackageVersionsLatestMinors.g.props b/tracer/build/PackageVersionsLatestMinors.g.props
index 1e8b31b23712..52cf96b169d2 100644
--- a/tracer/build/PackageVersionsLatestMinors.g.props
+++ b/tracer/build/PackageVersionsLatestMinors.g.props
@@ -252,6 +252,366 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
All
Samples.MassTransit7
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.0.16;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.1.3;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.2.5;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.3.7;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.4.1;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
ApiVersion=1.7.37;RestoreRecursive=false;BuildProjectReferences=false
diff --git a/tracer/build/PackageVersionsLatestSpecific.g.props b/tracer/build/PackageVersionsLatestSpecific.g.props
index 9e47de3c60cb..e11fd2ee9a8a 100644
--- a/tracer/build/PackageVersionsLatestSpecific.g.props
+++ b/tracer/build/PackageVersionsLatestSpecific.g.props
@@ -73,6 +73,67 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
Samples.MassTransit7
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net48
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp2.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ netcoreapp3.1
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net5.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net6.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net7.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net8.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net9.0
+ All
+ Samples.MassTransit8
+
+
+ ApiVersion=8.5.8;RestoreRecursive=false;BuildProjectReferences=false
+ net10.0
+ All
+ Samples.MassTransit8
+
+
ApiVersion=1.7.37;RestoreRecursive=false;BuildProjectReferences=false
net48
diff --git a/tracer/dependabot/integrations/Datadog.Dependabot.MassTransit.csproj b/tracer/dependabot/integrations/Datadog.Dependabot.MassTransit.csproj
index 68cf578b7edf..7416d221a972 100644
--- a/tracer/dependabot/integrations/Datadog.Dependabot.MassTransit.csproj
+++ b/tracer/dependabot/integrations/Datadog.Dependabot.MassTransit.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/tracer/src/Datadog.Trace/Activity/Handlers/ActivityHandlersRegister.cs b/tracer/src/Datadog.Trace/Activity/Handlers/ActivityHandlersRegister.cs
index 2d9245a115cf..45f161531e24 100644
--- a/tracer/src/Datadog.Trace/Activity/Handlers/ActivityHandlersRegister.cs
+++ b/tracer/src/Datadog.Trace/Activity/Handlers/ActivityHandlersRegister.cs
@@ -25,6 +25,9 @@ internal static class ActivityHandlersRegister
// Azure Service Bus handlers
new AzureServiceBusActivityHandler(),
+ // MassTransit handlers (8.x and later)
+ new MassTransitActivityHandler(),
+
// Quartz handlers
new QuartzActivityHandler(),
diff --git a/tracer/src/Datadog.Trace/Activity/Handlers/MassTransitActivityHandler.cs b/tracer/src/Datadog.Trace/Activity/Handlers/MassTransitActivityHandler.cs
new file mode 100644
index 000000000000..5ada8d94c107
--- /dev/null
+++ b/tracer/src/Datadog.Trace/Activity/Handlers/MassTransitActivityHandler.cs
@@ -0,0 +1,104 @@
+//
+// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc.
+//
+
+#nullable enable
+
+using System;
+using Datadog.Trace;
+using Datadog.Trace.Activity.DuckTypes;
+using Datadog.Trace.ClrProfiler.AutoInstrumentation.MassTransit;
+using Datadog.Trace.Configuration;
+using Datadog.Trace.Logging;
+using Datadog.Trace.Tagging;
+
+namespace Datadog.Trace.Activity.Handlers
+{
+ ///
+ /// Handles MassTransit activities for message bus operations.
+ /// This handler captures MassTransit ActivitySource events to trace messaging operations.
+ /// This handler is responsible for MassTransit v8.x and later.
+ /// Earlier MassTransit library versions (7.x) are handled by:
+ /// - tracer/src/Datadog.Trace/DiagnosticListeners/MassTransitDiagnosticObserver.cs
+ ///
+ internal sealed class MassTransitActivityHandler : IActivityHandler
+ {
+ private static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor();
+
+ public bool ShouldListenTo(string sourceName, string? version)
+ {
+ // Listen to MassTransit ActivitySource
+ // MassTransit 8+ uses ActivitySource named "MassTransit"
+ return sourceName.Equals("MassTransit", StringComparison.OrdinalIgnoreCase);
+ }
+
+ public void ActivityStarted(string sourceName, T activity)
+ where T : IActivity
+ {
+ // Check if MassTransit integration is enabled
+ if (!Tracer.Instance.CurrentTraceSettings.Settings.IsIntegrationEnabled(IntegrationId.MassTransit))
+ {
+ Log.Debug("MassTransit integration is disabled, skipping activity");
+ return;
+ }
+
+ // Start the activity with OpenTelemetry tags
+ ActivityHandlerCommon.ActivityStarted(sourceName, activity, tags: new OpenTelemetryTags(), out var activityMapping);
+
+ Log.Debug("MassTransitActivityHandler.ActivityStarted: Activity '{ActivityId}' started", activity.Id);
+ }
+
+ public void ActivityStopped(string sourceName, T activity)
+ where T : IActivity
+ {
+ // Find the span and update it before the common handler processes it
+ ActivityKey key = activity switch
+ {
+ IW3CActivity { TraceId: not null, SpanId: not null } w3cActivity => new(w3cActivity.TraceId, w3cActivity.SpanId),
+ _ => new(activity.Id)
+ };
+
+ if (key.IsValid() && ActivityHandlerCommon.ActivityMappingById.TryRemove(key, out var activityMapping) && activityMapping.Scope.Span is Span span)
+ {
+ Log.Debug("MassTransitActivityHandler.ActivityStopped: Processing span for activity '{ActivityId}'", activity.Id);
+
+ // Enhance the activity metadata before converting to span
+ if (activity is IActivity5 activity5)
+ {
+ MassTransitCommon.EnhanceActivityMetadata(activity5);
+ MassTransitCommon.SetActivityKind(activity5);
+ }
+
+ // Update the span from the enhanced activity
+ OtlpHelpers.UpdateSpanFromActivity(activity, span);
+
+ // Set clean operation name on the span
+ // Use the messaging.operation value directly (send, receive, process)
+ var messagingOperation = span.GetTag(Tags.MessagingOperation);
+ if (!string.IsNullOrEmpty(messagingOperation))
+ {
+ span.OperationName = $"masstransit.{messagingOperation}";
+ }
+
+ // Set span type to queue
+ span.Type = SpanTypes.Queue;
+
+ // Record telemetry for MassTransit integration
+ Tracer.Instance.TracerManager.Telemetry.IntegrationGeneratedSpan(IntegrationId.MassTransit);
+
+ // Finish the span
+ span.Finish(activity.StartTimeUtc.Add(activity.Duration));
+ activityMapping.Scope.Close();
+
+ Log.Debug("MassTransitActivityHandler.ActivityStopped: Span closed for activity '{ActivityId}'", activity.Id);
+ }
+ else
+ {
+ Log.Debug("MassTransitActivityHandler: Could not find span for activity '{ActivityId}' with key '{Key}'", activity.Id, key);
+ // Fallback to common handler if we couldn't find the span
+ ActivityHandlerCommon.ActivityStopped(sourceName, activity);
+ }
+ }
+ }
+}
diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/MassTransit/MassTransitCommon.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/MassTransit/MassTransitCommon.cs
index 9c9c3fb967ee..ec927ec37a16 100644
--- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/MassTransit/MassTransitCommon.cs
+++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/MassTransit/MassTransitCommon.cs
@@ -8,6 +8,8 @@
using System;
using System.Linq;
using System.Threading;
+using Datadog.Trace.Activity;
+using Datadog.Trace.Activity.DuckTypes;
using Datadog.Trace.ClrProfiler.AutoInstrumentation.MassTransit.DuckTypes;
using Datadog.Trace.DuckTyping;
diff --git a/tracer/test/Datadog.Trace.ClrProfiler.IntegrationTests/MassTransit8Tests.cs b/tracer/test/Datadog.Trace.ClrProfiler.IntegrationTests/MassTransit8Tests.cs
new file mode 100644
index 000000000000..9d14bd481c89
--- /dev/null
+++ b/tracer/test/Datadog.Trace.ClrProfiler.IntegrationTests/MassTransit8Tests.cs
@@ -0,0 +1,243 @@
+//
+// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License.
+// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc.
+//
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Datadog.Trace.Configuration;
+using Datadog.Trace.TestHelpers;
+using FluentAssertions;
+using FluentAssertions.Execution;
+using VerifyTests;
+using VerifyXunit;
+using Xunit;
+using Xunit.Abstractions;
+
+namespace Datadog.Trace.ClrProfiler.IntegrationTests;
+
+[UsesVerify]
+public class MassTransit8Tests : TracingIntegrationTest
+{
+ public MassTransit8Tests(ITestOutputHelper output)
+ : base("MassTransit8", output)
+ {
+ SetServiceVersion("1.0.0");
+ }
+
+ public static IEnumerable