- Move all .NET (6 projects, solution, Directory.*.props, nuget.config) into backend/ so the monorepo root can host non-.NET projects later - Remove throwaway test artifacts: player.html, pl.json - Trim dead Flutter rules from .gitignore Build from backend/Musify.slnx: 0 warnings, 0 errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
92 lines
4.1 KiB
C#
92 lines
4.1 KiB
C#
using MassTransit;
|
|
using Musify.Infrastructure.MassTransit.Consumers;
|
|
using Musify.Infrastructure.Persistence;
|
|
|
|
namespace Musify.Infrastructure.MassTransit
|
|
{
|
|
public static partial class MassTransitDependencyInjection
|
|
{
|
|
static void ConfigureConsumerEndpoint<TConsumer>(
|
|
IRabbitMqBusFactoryConfigurator busFactoryConfigurator,
|
|
IBusRegistrationContext busRegistrationContext,
|
|
string queueName)
|
|
where TConsumer : class, IConsumer
|
|
{
|
|
busFactoryConfigurator.ReceiveEndpoint(queueName, endpointConfigurator =>
|
|
{
|
|
endpointConfigurator.UseMessageRetry(retryConfigurator =>
|
|
retryConfigurator.Exponential(
|
|
retryLimit: 5,
|
|
minInterval: TimeSpan.FromSeconds(1),
|
|
maxInterval: TimeSpan.FromSeconds(30),
|
|
intervalDelta: TimeSpan.FromSeconds(2)));
|
|
|
|
endpointConfigurator.UseEntityFrameworkOutbox<Database>(busRegistrationContext);
|
|
|
|
endpointConfigurator.ConfigureConsumer<TConsumer>(busRegistrationContext);
|
|
});
|
|
}
|
|
|
|
static void ConfigureExecuteActivityEndpoint<TActivity, TArguments>(
|
|
IRabbitMqBusFactoryConfigurator busFactoryConfigurator,
|
|
IBusRegistrationContext busRegistrationContext,
|
|
string endpointName)
|
|
where TActivity : class, IExecuteActivity<TArguments>
|
|
where TArguments : class
|
|
{
|
|
busFactoryConfigurator.ReceiveEndpoint(MassTransitEndpointNames.ExecuteQueue(endpointName), endpointConfigurator =>
|
|
{
|
|
endpointConfigurator.UseMessageRetry(retryConfigurator =>
|
|
retryConfigurator.Exponential(
|
|
retryLimit: 5,
|
|
minInterval: TimeSpan.FromSeconds(1),
|
|
maxInterval: TimeSpan.FromSeconds(30),
|
|
intervalDelta: TimeSpan.FromSeconds(2)));
|
|
|
|
endpointConfigurator.UseEntityFrameworkOutbox<Database>(busRegistrationContext);
|
|
|
|
endpointConfigurator.ExecuteActivityHost<TActivity, TArguments>(busRegistrationContext);
|
|
});
|
|
}
|
|
|
|
static void ConfigureActivityEndpoint<TActivity, TArguments, TLog>(
|
|
IRabbitMqBusFactoryConfigurator busFactoryConfigurator,
|
|
IBusRegistrationContext busRegistrationContext,
|
|
string endpointName)
|
|
where TActivity : class, IActivity<TArguments, TLog>
|
|
where TArguments : class
|
|
where TLog : class
|
|
{
|
|
busFactoryConfigurator.ReceiveEndpoint(MassTransitEndpointNames.ExecuteQueue(endpointName), endpointConfigurator =>
|
|
{
|
|
endpointConfigurator.UseMessageRetry(retryConfigurator =>
|
|
retryConfigurator.Exponential(
|
|
retryLimit: 5,
|
|
minInterval: TimeSpan.FromSeconds(1),
|
|
maxInterval: TimeSpan.FromSeconds(30),
|
|
intervalDelta: TimeSpan.FromSeconds(2)));
|
|
|
|
endpointConfigurator.UseEntityFrameworkOutbox<Database>(busRegistrationContext);
|
|
|
|
endpointConfigurator.ExecuteActivityHost<TActivity, TArguments>(
|
|
EndpointHelper.BuildCompensateActivityUri(endpointName),
|
|
busRegistrationContext);
|
|
});
|
|
|
|
busFactoryConfigurator.ReceiveEndpoint(MassTransitEndpointNames.CompensateQueue(endpointName), endpointConfigurator =>
|
|
{
|
|
endpointConfigurator.UseMessageRetry(retryConfigurator =>
|
|
retryConfigurator.Exponential(
|
|
retryLimit: 5,
|
|
minInterval: TimeSpan.FromSeconds(1),
|
|
maxInterval: TimeSpan.FromSeconds(30),
|
|
intervalDelta: TimeSpan.FromSeconds(2)));
|
|
|
|
endpointConfigurator.UseEntityFrameworkOutbox<Database>(busRegistrationContext);
|
|
|
|
endpointConfigurator.CompensateActivityHost<TActivity, TLog>(busRegistrationContext);
|
|
});
|
|
}
|
|
}
|
|
}
|