How can I configure MassTransit to use quorum queues instead of classic queues when using a state machine saga? In the following code if I uncomment the cfg.ReceiveEndpoint(x => x.SetQuorumQueue()) line, it stil creates classic queues.
Also where do I use UseScheduledRedelivery and UseMessageRetry methods to configure retry and redelivery?
public static IServiceCollection RegisterMassTransit(
this IServiceCollection services,
string sagaStateConnectionString,
SerilogLoggerFactory factory,
TransportSettings transportSettings)
{
services.AddDbContext<OrderSagaDbContext>(r =>
{
r.UseSqlServer(sagaStateConnectionString, m =>
{
m.MigrationsAssembly(Assembly.GetExecutingAssembly().GetName().Name);
m.MigrationsHistoryTable($"__{nameof(OrderSagaDbContext)}");
});
});
services.AddMassTransit(c =>
{
c.SetKebabCaseEndpointNameFormatter();
c.AddSagaStateMachine<OrderStateMachine, OrderState>()
.EntityFrameworkRepository(r =>
{
r.ExistingDbContext<OrderSagaDbContext>();
r.UseSqlServer();
});
c.AddBus(context => ConfigureBus(context, transportSettings));
foreach (var q in transportSettings.Queues)
{
c.AddConsumers(TypeNamesToTypes(q.Processors));
}
});
return services;
}
private static IBusControl ConfigureBus(
IBusRegistrationContext context,
TransportSettings transportSettings)
{
return Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host(transportSettings.Host, transportSettings.VirtualHost, hst =>
{
hst.Username(transportSettings.UserName);
hst.Password(transportSettings.Password);
});
//cfg.ReceiveEndpoint(x => x.SetQuorumQueue());
cfg.ConfigureEndpoints(context);
});
}