You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MassTransit累积canceljob主题订阅至2000个后失效,是否属正常行为?

问题分析与解决方案

这种订阅累积的情况绝对不是正常行为,明显是配置或Job Service的使用方式存在问题,导致MassTransit重复创建masstransit.contracts.jobservice~canceljob主题的订阅,最终触达Azure Service Bus单个主题2000个订阅的上限,引发应用故障。

可能的原因及修复建议:

  • 错误注册Job Service消费者
    masstransit.contracts.jobservice~canceljob是MassTransit Job Service的内置主题,若你在使用Job Service功能,不能将Job相关消费者通过AddConsumers批量注册(这是普通消费者的注册方式)。错误的注册逻辑会导致每次应用启动都重复创建该主题的订阅。

  • 重复配置Job Service组件
    检查代码中是否多次调用Job Service相关配置方法(比如AddJobService),重复配置会触发重复创建订阅的问题。

  • 修正后的配置示例
    若确实使用Job Service,需单独注册相关组件,示例如下:

    public static IServiceCollection RegisterServiceBus(this IServiceCollection services, IConfiguration configuration)
    {
        services.AddMassTransit(bus =>
        {
            bus.AddServiceBusMessageScheduler();
            
            // 注册普通消费者
            bus.AddConsumers(typeof(Startup).Assembly);
            
            // 单独注册Job Service组件(按需配置)
            bus.AddJobService(options =>
            {
                options.JobTimeout = TimeSpan.FromHours(1);
            });
    
            var busConnection = configuration["Bus:Connection"];
            bus.UsingAzureServiceBus((ctx, cfg) => 
                ConfigureActionCallback(ctx, cfg, busConnection, KebabCaseEndpointNameFormatter.Instance));
        });
    
        return services;
    }
    
  • 清理冗余订阅
    先在Azure门户手动删除masstransit.contracts.jobservice~canceljob主题下的所有订阅,再重启应用,观察是否仅创建1-2个正常订阅。

额外检查点:

  • 确认应用每次启动时使用的消费者实例标识是否稳定,若标识动态生成且未复用,MassTransit会判定为新消费者,进而创建新订阅。
  • 检查ConfigureEndpoints的命名规则,你当前使用的KebabCaseEndpointNameFormatter.Instance是稳定的,但需确保Job相关端点命名无动态变化。

内容的提问来源于stack exchange,提问作者JustSharingSomeCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:33:26