azure MassTransit会随着时间的推移累积订阅

2q5ifsrm  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(126)

每次我运行我的应用程序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);
        }

r1wp621o

r1wp621o1#

Azure服务总线有一个长期存在的问题,他们可能永远不会解决它。如果你创建了一个转发到另一个队列的AutoDeleteOnIdle订阅,它将永远不会被Azure自动删除。
MassTransit通过确保在总线停止时删除所有临时端点订阅来处理此问题(这是由.NET通用主机使用MassTransit的托管服务自动发生的)。
如果您的总线没有正确停止(您可以在关闭时在日志中看到INFO消息),MassTransit将不会强制删除这些订阅。这导致它们随着时间的推移而积累,因为Azure永远不会遵守AutoDeleteOnIdle设置。
因此,请确保在主机停止时总线也停止,并监视主题以确保订阅计数不会增长(可能还需要设置一个常规作业来清除旧订阅)。

相关问题