Skip to content

Commit c67f9ee

Browse files
committed
refactor(api): streamline messaging handling and attributes
- Simplifies message handling by refactoring method names to improve clarity (e.g., `HandleAsync` to `Handle` for consistency). - Introduces new `KindAttribute` and `FaultKindAttribute` for better classification of message types. - Replaces the deprecated payload type handling with a more robust message kind system. - Removes redundant classes related to the old payload type architecture for cleaner code and reduced complexity. Enhances code maintainability through refactoring while ensuring existing functionality is preserved.
1 parent 529b7fc commit c67f9ee

31 files changed

Lines changed: 371 additions & 376 deletions

File tree

Directory.Packages.props

Lines changed: 99 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,101 @@
11
<Project>
2-
<PropertyGroup>
3-
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
4-
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
5-
</PropertyGroup>
6-
<ItemGroup>
7-
<PackageVersion Include="Asp.Versioning.Http" Version="8.1.0" />
8-
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
9-
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
10-
<PackageVersion Include="AspNetCore.HealthChecks.ApplicationStatus" Version="9.0.0" />
11-
<PackageVersion Include="AspNetCore.HealthChecks.Azure.Data.Tables" Version="9.0.0" />
12-
<PackageVersion Include="AspNetCore.HealthChecks.Azure.KeyVault.Secrets" Version="9.0.0" />
13-
<PackageVersion Include="AspNetCore.HealthChecks.Azure.Storage.Blobs" Version="9.0.0" />
14-
<PackageVersion Include="AspNetCore.HealthChecks.Azure.Storage.Queues" Version="9.0.0" />
15-
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
16-
<PackageVersion Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
17-
<PackageVersion Include="AspNetCore.HealthChecks.UI" Version="9.0.0" />
18-
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
19-
<PackageVersion Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="9.0.0" />
20-
<PackageVersion Include="Azure.Data.Tables" Version="12.11.0" />
21-
<PackageVersion Include="Azure.Identity" Version="1.14.1" />
22-
<PackageVersion Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.3.0" />
23-
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.8.0" />
24-
<PackageVersion Include="Azure.Storage.Blobs" Version="12.24.1" />
25-
<PackageVersion Include="Azure.Storage.Queues" Version="12.22.0" />
26-
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
27-
<PackageVersion Include="EntityFrameworkCore.Exceptions.SqlServer" Version="8.1.3" />
28-
<PackageVersion Include="FluentValidation" Version="12.0.0" />
29-
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.0.0" />
30-
<PackageVersion Include="JetBrains.Annotations" Version="2024.3.0" />
31-
<PackageVersion Include="KubernetesClient" Version="17.0.4" />
32-
<PackageVersion Include="MassTransit" Version="8.5.0" />
33-
<PackageVersion Include="MassTransit.Abstractions" Version="8.5.0" />
34-
<PackageVersion Include="MassTransit.RabbitMQ" Version="8.5.0" />
35-
<PackageVersion Include="MediatR" Version="13.0.0" />
36-
<PackageVersion Include="MediatR.Contracts" Version="2.0.1" />
37-
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.6" />
38-
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="9.0.6" />
39-
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.0.2" />
40-
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.6" />
41-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.6" />
42-
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.6" />
43-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.6" />
44-
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.6" />
45-
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.6" />
46-
<PackageVersion Include="Microsoft.Extensions.Azure" Version="1.12.0" />
47-
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.6" />
48-
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.6" />
49-
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.6" />
50-
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="9.0.6" />
51-
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="9.0.6" />
52-
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.6" />
53-
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.6" />
54-
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.6.0" />
55-
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="9.0.6" />
56-
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.6" />
57-
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
58-
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.21.2" />
59-
<PackageVersion Include="Moq" Version="4.20.72" />
60-
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
61-
<PackageVersion Include="NSwag.AspNetCore" Version="14.4.0" />
62-
<PackageVersion Include="OneOf" Version="3.0.271" />
63-
<PackageVersion Include="OneOf.SourceGenerator" Version="3.0.271" />
64-
<PackageVersion Include="OpenTelemetry.Api" Version="1.12.0" />
65-
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.12.0" />
66-
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.12.0" />
67-
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0" />
68-
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0" />
69-
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.12.0" />
70-
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0" />
71-
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.10.0-beta.1" />
72-
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.10.0-beta.1" />
73-
<PackageVersion Include="oqo0.SwaggerThemes" Version="1.4.3" />
74-
<PackageVersion Include="Seq.Api" Version="2025.2.0" />
75-
<PackageVersion Include="Serilog" Version="4.3.0" />
76-
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
77-
<PackageVersion Include="Serilog.Enrichers.Environment" Version="3.0.1" />
78-
<PackageVersion Include="Serilog.Extensions.Hosting" Version="9.0.0" />
79-
<PackageVersion Include="Serilog.Extensions.Logging" Version="9.0.2" />
80-
<PackageVersion Include="Serilog.Formatting.Compact" Version="3.0.0" />
81-
<PackageVersion Include="Serilog.Settings.Configuration" Version="9.0.0" />
82-
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
83-
<PackageVersion Include="Serilog.Sinks.OpenTelemetry" Version="4.2.0" />
84-
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.0.0" />
85-
<PackageVersion Include="SharpGrip.FluentValidation.AutoValidation.Endpoints" Version="1.5.0" />
86-
<PackageVersion Include="SharpGrip.FluentValidation.AutoValidation.Mvc" Version="1.5.0" />
87-
<PackageVersion Include="StackExchange.Redis" Version="2.8.41" />
88-
<PackageVersion Include="Swashbuckle.AspNetCore" Version="9.0.1" />
89-
<PackageVersion Include="System.Linq.Async" Version="6.0.3" />
90-
<PackageVersion Include="Testcontainers" Version="4.6.0" />
91-
<PackageVersion Include="Testcontainers.MsSql" Version="4.6.0" />
92-
<PackageVersion Include="Testcontainers.Redis" Version="4.6.0" />
93-
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.6.0" />
94-
<PackageVersion Include="Testcontainers.MariaDb" Version="4.6.0" />
95-
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
96-
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.3.efcore.9.0.0" />
97-
<PackageVersion Include="xunit" Version="2.9.3" />
98-
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.1" />
99-
</ItemGroup>
2+
<PropertyGroup>
3+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
4+
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<PackageVersion Include="Asp.Versioning.Http" Version="8.1.0" />
8+
<PackageVersion Include="Asp.Versioning.Mvc" Version="8.1.0" />
9+
<PackageVersion Include="Asp.Versioning.Mvc.ApiExplorer" Version="8.1.0" />
10+
<PackageVersion Include="AspNetCore.HealthChecks.ApplicationStatus" Version="9.0.0" />
11+
<PackageVersion Include="AspNetCore.HealthChecks.Azure.Data.Tables" Version="9.0.0" />
12+
<PackageVersion Include="AspNetCore.HealthChecks.Azure.KeyVault.Secrets" Version="9.0.0" />
13+
<PackageVersion Include="AspNetCore.HealthChecks.Azure.Storage.Blobs" Version="9.0.0" />
14+
<PackageVersion Include="AspNetCore.HealthChecks.Azure.Storage.Queues" Version="9.0.0" />
15+
<PackageVersion Include="AspNetCore.HealthChecks.Redis" Version="9.0.0" />
16+
<PackageVersion Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
17+
<PackageVersion Include="AspNetCore.HealthChecks.UI" Version="9.0.0" />
18+
<PackageVersion Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
19+
<PackageVersion Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="9.0.0" />
20+
<PackageVersion Include="Azure.Data.Tables" Version="12.11.0" />
21+
<PackageVersion Include="Azure.Identity" Version="1.14.1" />
22+
<PackageVersion Include="Azure.Monitor.OpenTelemetry.AspNetCore" Version="1.3.0" />
23+
<PackageVersion Include="Azure.Security.KeyVault.Secrets" Version="4.8.0" />
24+
<PackageVersion Include="Azure.Storage.Blobs" Version="12.24.1" />
25+
<PackageVersion Include="Azure.Storage.Queues" Version="12.22.0" />
26+
<PackageVersion Include="coverlet.collector" Version="6.0.4" />
27+
<PackageVersion Include="EntityFrameworkCore.Exceptions.SqlServer" Version="8.1.3" />
28+
<PackageVersion Include="FluentValidation" Version="12.0.0" />
29+
<PackageVersion Include="FluentValidation.DependencyInjectionExtensions" Version="12.0.0" />
30+
<PackageVersion Include="JetBrains.Annotations" Version="2024.3.0" />
31+
<PackageVersion Include="KubernetesClient" Version="17.0.4" />
32+
<PackageVersion Include="MassTransit" Version="8.5.0" />
33+
<PackageVersion Include="MassTransit.Abstractions" Version="8.5.0" />
34+
<PackageVersion Include="MassTransit.RabbitMQ" Version="8.5.0" />
35+
<PackageVersion Include="MediatR" Version="13.0.0" />
36+
<PackageVersion Include="MediatR.Contracts" Version="2.0.1" />
37+
<PackageVersion Include="Microsoft.AspNetCore.Mvc.Testing" Version="9.0.6" />
38+
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="9.0.6" />
39+
<PackageVersion Include="Microsoft.Data.SqlClient" Version="6.0.2" />
40+
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.6" />
41+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.6" />
42+
<PackageVersion Include="Microsoft.EntityFrameworkCore.InMemory" Version="9.0.6" />
43+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.6" />
44+
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.6" />
45+
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.6" />
46+
<PackageVersion Include="Microsoft.Extensions.Azure" Version="1.12.0" />
47+
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.6" />
48+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="9.0.6" />
49+
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.6" />
50+
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="9.0.6" />
51+
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions" Version="9.0.6" />
52+
<PackageVersion Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="9.0.6" />
53+
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="9.0.6" />
54+
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.6" />
55+
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="9.6.0" />
56+
<PackageVersion Include="Microsoft.Extensions.Identity.Core" Version="9.0.6" />
57+
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="9.0.6" />
58+
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.14.1" />
59+
<PackageVersion Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.22.1" />
60+
<PackageVersion Include="Moq" Version="4.20.72" />
61+
<PackageVersion Include="Newtonsoft.Json" Version="13.0.3" />
62+
<PackageVersion Include="NSwag.AspNetCore" Version="14.4.0" />
63+
<PackageVersion Include="OneOf" Version="3.0.271" />
64+
<PackageVersion Include="OneOf.SourceGenerator" Version="3.0.271" />
65+
<PackageVersion Include="OpenTelemetry.Api" Version="1.12.0" />
66+
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.12.0" />
67+
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.12.0" />
68+
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.12.0" />
69+
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.12.0" />
70+
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.12.0" />
71+
<PackageVersion Include="OpenTelemetry.Instrumentation.Runtime" Version="1.12.0" />
72+
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.10.0-beta.1" />
73+
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.10.0-beta.1" />
74+
<PackageVersion Include="oqo0.SwaggerThemes" Version="1.4.3" />
75+
<PackageVersion Include="Seq.Api" Version="2025.2.0" />
76+
<PackageVersion Include="Serilog" Version="4.3.0" />
77+
<PackageVersion Include="Serilog.AspNetCore" Version="9.0.0" />
78+
<PackageVersion Include="Serilog.Enrichers.Environment" Version="3.0.1" />
79+
<PackageVersion Include="Serilog.Extensions.Hosting" Version="9.0.0" />
80+
<PackageVersion Include="Serilog.Extensions.Logging" Version="9.0.2" />
81+
<PackageVersion Include="Serilog.Formatting.Compact" Version="3.0.0" />
82+
<PackageVersion Include="Serilog.Settings.Configuration" Version="9.0.0" />
83+
<PackageVersion Include="Serilog.Sinks.Console" Version="6.0.0" />
84+
<PackageVersion Include="Serilog.Sinks.OpenTelemetry" Version="4.2.0" />
85+
<PackageVersion Include="Serilog.Sinks.Seq" Version="9.0.0" />
86+
<PackageVersion Include="SharpGrip.FluentValidation.AutoValidation.Endpoints" Version="1.5.0" />
87+
<PackageVersion Include="SharpGrip.FluentValidation.AutoValidation.Mvc" Version="1.5.0" />
88+
<PackageVersion Include="StackExchange.Redis" Version="2.8.41" />
89+
<PackageVersion Include="Swashbuckle.AspNetCore" Version="9.0.1" />
90+
<PackageVersion Include="System.Linq.Async" Version="6.0.3" />
91+
<PackageVersion Include="Testcontainers" Version="4.6.0" />
92+
<PackageVersion Include="Testcontainers.MsSql" Version="4.6.0" />
93+
<PackageVersion Include="Testcontainers.Redis" Version="4.6.0" />
94+
<PackageVersion Include="Testcontainers.PostgreSql" Version="4.6.0" />
95+
<PackageVersion Include="Testcontainers.MariaDb" Version="4.6.0" />
96+
<PackageVersion Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.4" />
97+
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="9.0.0-preview.3.efcore.9.0.0" />
98+
<PackageVersion Include="xunit" Version="2.9.3" />
99+
<PackageVersion Include="xunit.runner.visualstudio" Version="3.1.1" />
100+
</ItemGroup>
100101
</Project>

playground/Playground.Microservice.Api.Host/HostedServices/TestHostedService.cs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using ES.FX.TransactionalOutbox.EntityFrameworkCore;
2+
using ES.FX.TransactionalOutbox.Observability;
23
using Microsoft.EntityFrameworkCore;
34
using Playground.Microservice.Api.Host.Testing;
45
using Playground.Shared.Data.Simple.EntityFrameworkCore;
@@ -14,19 +15,23 @@ internal class TestHostedService(
1415
{
1516
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
1617
{
17-
await Task.CompletedTask;
18-
19-
while (true)
18+
while (!stoppingToken.IsCancellationRequested)
2019
{
20+
var activity = Diagnostics.ActivitySource.StartActivity();
21+
22+
Console.WriteLine($"Activity ID: {activity?.Id ?? "No Activity"}");
23+
Console.WriteLine($"Activity ParentId: {activity?.ParentId ?? "No Activity"}");
24+
Console.WriteLine($"Activity RootId: {activity?.RootId ?? "No Activity"}");
25+
2126
var dbContextFactory = serviceProvider.GetRequiredService<IDbContextFactory<SimpleDbContext>>();
2227

2328
await using var dbContext =
2429
await dbContextFactory.CreateDbContextAsync(stoppingToken).ConfigureAwait(false);
25-
for (var i = 0; i < 50; i++)
30+
for (var i = 0; i < 1; i++)
2631
{
27-
dbContext.AddOutboxMessage(new OutboxTestMessage
32+
dbContext.AddOutboxMessage(new TestMessage
2833
{
29-
SomeProp = "Property"
34+
Id = Guid.NewGuid()
3035
});
3136
dbContext.SimpleUsers.Add(new SimpleUser
3237
{ Id = Guid.CreateVersion7(), Username = Guid.CreateVersion7().ToString() });
@@ -40,7 +45,6 @@ protected override async Task ExecuteAsync(CancellationToken stoppingToken)
4045
// await redisDatabase.StringGetAsync("something");
4146
//}
4247

43-
4448
await Task.Delay(15000, stoppingToken).ConfigureAwait(false);
4549
}
4650
}

0 commit comments

Comments
 (0)