C# MassTransit和RabbitMq没有';出现错误时,请不要重试
我对MassTransit和rabbitmq的重试有问题 我已获得代码配置:C# MassTransit和RabbitMq没有';出现错误时,请不要重试,c#,.net,rabbitmq,queue,masstransit,C#,.net,Rabbitmq,Queue,Masstransit,我对MassTransit和rabbitmq的重试有问题 我已获得代码配置: private static void ConfigureMassTransitWithRabbitMq(this IServiceCollection services, string host, string username, string pwd, string cluster, Assembly assembly) { services.AddMa
private static void ConfigureMassTransitWithRabbitMq(this IServiceCollection services, string host, string username, string pwd, string cluster, Assembly assembly)
{
services.AddMassTransit(config =>
{
config.AddConsumers(assembly);
config.SetKebabCaseEndpointNameFormatter();
config.UsingRabbitMq((context, rabbitMqConfig) =>
{
rabbitMqConfig.UseRetry(e => Retry.Immediate(3));
rabbitMqConfig.ConfigureEndpoints(context);
rabbitMqConfig.ConfigurePublish(pipe =>
{
pipe.UseExecute(context1 =>
{
if (context1.CorrelationId == null)
{
context1.CorrelationId = Guid.NewGuid();
}
});
});
rabbitMqConfig.Host(new Uri(host), hst =>
{
hst.Username(username);
hst.Password(pwd);
hst.PublisherConfirmation = true;
hst.Heartbeat(5);
hst.UseCluster(c =>
{
var clusters = cluster?.Split(';');
if (cluster == null || clusters.Length == 0)
return;
foreach (var item in clusters)
c.Node(item);
});
});
rabbitMqConfig.ManagementEndpoint((conf) =>
{
conf.ConfigurePublish((p) =>
{
p.UseRetry((r) =>
{
r.Exponential(3, TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(5));
});
});
});
});
});
services.AddMassTransitHostedService();
}
rabbitMqConfig.UseDelayedExchangeMessageScheduler();
我通过组装添加我的消费者
我只是尝试使用:
rabbitMqConfig.UseRetry(e=>Retry.Immediate(3))代码>配置MassTransit时
我试着用这个:
try
{
var order = _mapper.Map<object>(context.Message);
await Execute(order);
await context.ConsumeCompleted;
}
catch (Exception)
{
var retry = context.GetRetryCount();
if (maxAttempts > 3)
{
throw;
}
await context.Redeliver(TimeSpan.FromSeconds(5));
}
在上一个例子中,我得到了重试次数,但我从未得到重试次数,因此我无法控制它。我也尝试通过标题和其他属性获取此金额,但我始终得到0
谁能帮帮我 您的配置顺序错误,根据以上示例更正的配置如下所示:
private static void ConfigureMassTransitWithRabbitMq(this IServiceCollection services, string host, string username, string pwd, string cluster, Assembly assembly)
{
services.AddMassTransit(config =>
{
config.AddConsumers(assembly);
config.SetKebabCaseEndpointNameFormatter();
config.UsingRabbitMq((context, rabbitMqConfig) =>
{
rabbitMqConfig.Host(new Uri(host), hst =>
{
hst.Username(username);
hst.Password(pwd);
hst.Heartbeat(5);
hst.UseCluster(c =>
{
var clusters = cluster?.Split(';');
if (cluster == null || clusters.Length == 0)
return;
foreach (var item in clusters)
c.Node(item);
});
});
rabbitMqConfig.ConfigurePublish(pipe =>
{
pipe.UseExecute(context1 =>
{
context1.CorrelationId ??= Guid.NewGuid();
});
});
rabbitMqConfig.UseRetry(e => Retry.Immediate(3));
rabbitMqConfig.ConfigureEndpoints(context);
});
});
services.AddMassTransitHostedService();
}
我还删除了任何不需要的内容,要么是因为它是默认行为,要么是未使用的
我将
ConfigureEndpoints
放在配置的最后一个,而Host
放在第一个。管道已订购,因此请确保按顺序添加过滤器等。重试在内存中,您不应该调用redeliver,也不应该尝试自己重试。文档中有您尝试执行的所有操作的示例。非常感谢@ChrisPatterson!您能给我发送一个文档链接来显示这个特定的案例吗(类似于通过程序集添加使用者并以通用方式配置所有使用者)?