将 ConnectReceiveEndpoint 与 MassTransit 一起使用时如何设置 PrefetchCount?
How to set PrefetchCount when using ConnectReceiveEndpoint with MassTransit?
默认情况下,MassTransit 将 PrefetchCount 设置为 16。我想更改它。我可以在配置 MassTransit 时执行此操作。但是当使用 ConnectReceiveEndpoint
时,我无法设置 PrefetchCount。
如果我设置 PrefetchCount 进行配置,那么 MassTransit 将创建一些随机队列,这些队列正确地具有我定义的 PrefetchCount,但是使用 ConnectReceiveEndpoint
创建的队列仍然具有默认值 16。
有什么方法可以为使用 ConnectReceiveEndpoint
创建的队列设置 PrefetchCount?
public async Task SubscribeAsync<T>(Func<T, Task> callback, string queueName) where T : class, IMessage
{
queueName ??= $"{Assembly.GetEntryAssembly().GetName().Name}_{Environment.MachineName}";
hostHandler = busControl.ConnectReceiveEndpoint(queueName, cfg =>
{
cfg.Handler<T>(async context =>
{
return callback(context.Message);
},
config =>
{
config.UseConcurrentMessageLimit(10);
config.UseMessageRetry(r => r.Exponential(3, TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(2)));
});
});
await hostHandler.Ready;
}
可以查看配置器的类型,合理使用:
if (cfg is IRabbitMqReceiveEndpointConfigurator rabbit)
rabbit.PrefetchCount = 80;
默认情况下,MassTransit 将 PrefetchCount 设置为 16。我想更改它。我可以在配置 MassTransit 时执行此操作。但是当使用 ConnectReceiveEndpoint
时,我无法设置 PrefetchCount。
如果我设置 PrefetchCount 进行配置,那么 MassTransit 将创建一些随机队列,这些队列正确地具有我定义的 PrefetchCount,但是使用 ConnectReceiveEndpoint
创建的队列仍然具有默认值 16。
有什么方法可以为使用 ConnectReceiveEndpoint
创建的队列设置 PrefetchCount?
public async Task SubscribeAsync<T>(Func<T, Task> callback, string queueName) where T : class, IMessage
{
queueName ??= $"{Assembly.GetEntryAssembly().GetName().Name}_{Environment.MachineName}";
hostHandler = busControl.ConnectReceiveEndpoint(queueName, cfg =>
{
cfg.Handler<T>(async context =>
{
return callback(context.Message);
},
config =>
{
config.UseConcurrentMessageLimit(10);
config.UseMessageRetry(r => r.Exponential(3, TimeSpan.FromSeconds(2), TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(2)));
});
});
await hostHandler.Ready;
}
可以查看配置器的类型,合理使用:
if (cfg is IRabbitMqReceiveEndpointConfigurator rabbit)
rabbit.PrefetchCount = 80;