每次我运行我的应用程序MassTransit都会创建一个名为"masstransit.contracts.jobservice~canceljob"
的主题的订阅,直到它达到2000个订阅(不是立即,它们会随着时间的推移而积累)并停止工作。
我想知道的是,如果这是一个“正常”的行为,或者如果我做了一些错误的配置,考虑到这只是那个主题,积累订阅,其他的只有1或2个订阅,所以没有问题。
下面是我为MassTransit使用的配置:
public static IServiceCollection RegisterServiceBus(this IServiceCollection services, IConfiguration configuration)
{
services.AddMassTransit(bus =>
{
bus.AddServiceBusMessageScheduler();
bus.AddConsumers(typeof(Startup).Assembly);
var busConnnetion = configuration["Bus:Connection"];
bus.UsingAzureServiceBus(configure: (ctx, cfg) => ConfigureActionCallback(ctx, cfg, busConnnetion, KebabCaseEndpointNameFormatter.Instance));
});
return services;
}
字符串ConfigureActionCallback
方法:
static void ConfigureActionCallback(IBusRegistrationContext ctx, IServiceBusBusFactoryConfigurator cfg, string busConnection, IEndpointNameFormatter enpointNameFormatter)
{
cfg.Host(busConnection);
cfg.UseServiceBusMessageScheduler();
cfg.UseMessageRetry(r =>
{
r.Incremental(5, TimeSpan.FromMinutes(10), TimeSpan.FromMinutes(20));
});
cfg.UseInMemoryOutbox();
cfg.DefaultMessageTimeToLive = TimeSpan.FromDays(1);
cfg.MaxAutoRenewDuration = TimeSpan.FromMinutes(30);
cfg.ConfigureEndpoints(ctx);
}
型
1条答案
按热度按时间r1wp621o1#
Azure服务总线有一个长期存在的问题,他们可能永远不会解决它。如果你创建了一个转发到另一个队列的
AutoDeleteOnIdle
订阅,它将永远不会被Azure自动删除。MassTransit通过确保在总线停止时删除所有临时端点订阅来处理此问题(这是由.NET通用主机使用MassTransit的托管服务自动发生的)。
如果您的总线没有正确停止(您可以在关闭时在日志中看到INFO消息),MassTransit将不会强制删除这些订阅。这导致它们随着时间的推移而积累,因为Azure永远不会遵守
AutoDeleteOnIdle
设置。因此,请确保在主机停止时总线也停止,并监视主题以确保订阅计数不会增长(可能还需要设置一个常规作业来清除旧订阅)。