I’m using a persistent outbox pattern. Additionally, I’m using Quartz Scheduler to periodically check the outbox and resend the failed messages. Unfortunally redelivery doesn’t work together with persistent outbox.
I’m using .net8, masstransit 8.2.3
I tried changing the persistent outbox to in memory and it started working, unfortunately it needs a persistent outbox.
Here is the code:
services.AddMassTransit(configurator =>
{
var schedulerEndpointAddress = new Uri($"{rabbitSettings.Host}/{rabbitSettings.VHost}/quartz");
var redeliveryPolicy = new []
{
TimeSpan.FromSeconds(3),
TimeSpan.FromSeconds(6),
TimeSpan.FromSeconds(9),
TimeSpan.FromSeconds(12),
TimeSpan.FromSeconds(15),
};
configurator.AddMessageScheduler(schedulerEndpointAddress);
configurator.AddQuartzConsumers();
configurator.AddQuartz();
configurator.AddQuartzHostedService();
configurator.SetKebabCaseEndpointNameFormatter();
configurator.AddConsumer<CreateSingleDailyPaymentConsumer>(consumerConfigurator =>
{
consumerConfigurator.UseScheduledRedelivery(retryConfigurator =>
retryConfigurator.SetRetryPolicy(filter => filter.Intervals(redeliveryPolicy)));
});
configurator.UsingRabbitMq((context, cfg) =>
{
cfg.Host($"{rabbitSettings.Host}/{rabbitSettings.VHost}", hostConfigurator =>
{
hostConfigurator.Username(rabbitSettings.Username);
hostConfigurator.Password(rabbitSettings.Password);
hostConfigurator.Heartbeat(TimeSpan.FromSeconds(10));
});
cfg.ConfigureEndpoints(context, new KebabCaseEndpointNameFormatter("nfbg-"));
cfg.DeployPublishTopology = true;
//cfg.UseInMemoryOutbox(context); it works with in memory
});
configurator.AddEntityFrameworkOutbox<FuneralConsumerContext>(outboxConfigurator =>
{
outboxConfigurator.UseSqlServer();
outboxConfigurator.UseBusOutbox();
});
configurator.AddConfigureEndpointsCallback((context, name, endpointConfigurator) =>
{
endpointConfigurator.UseMessageScheduler(schedulerEndpointAddress);
endpointConfigurator.UseEntityFrameworkOutbox<FuneralConsumerContext>(context);
});
});
New contributor
user26676833 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.