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

如何在启动时记录Azure Service Bus与MassTransit的Prefetch及并发消息限制值?

实现Azure Service Bus + MassTransit启动时记录Prefetch与并发消息限制的方案

方案一:直接从MassTransit配置实例读取

在配置接收端点时,可直接读取设置好的PrefetchCount和ConcurrentMessageLimit值并记录,或者在Bus启动后遍历接收端点获取配置:

// 配置Bus时即时记录
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
{
    cfg.Host("your-connection-string");
    cfg.ReceiveEndpoint("your-queue", e =>
    {
        e.PrefetchCount = 100;
        e.ConcurrentMessageLimit = 10;

        _logger.LogInformation("队列 {Queue} 配置:预取数={Prefetch}, 并发消息限制={Concurrent}", 
            e.InputAddress, e.PrefetchCount, e.ConcurrentMessageLimit);
    });
});

// Bus启动后遍历所有接收端点读取配置
await busControl.StartAsync();
foreach (var endpoint in busControl.GetReceiveEndpoints())
{
    if (endpoint is AzureServiceBusReceiveEndpoint azureEndpoint)
    {
        var config = azureEndpoint.Configuration;
        _logger.LogInformation("队列 {Queue} 配置:预取数={Prefetch}, 并发消息限制={Concurrent}", 
            config.QueueName, config.PrefetchCount, config.ConcurrentMessageLimit);
    }
}

方案二:封装扩展方法统一处理日志

把日志逻辑封装成扩展方法,在配置每个接收端点时调用,避免重复代码:

public static class MassTransitLoggingExtensions
{
    public static IReceiveEndpointConfigurator LogQueueSettings(this IReceiveEndpointConfigurator configurator, ILogger logger)
    {
        if (configurator is AzureServiceBusReceiveEndpointConfiguration azureConfig)
        {
            logger.LogInformation("队列 {Queue} 启动配置:预取数={Prefetch}, 并发消息限制={Concurrent}", 
                azureConfig.QueueName, azureConfig.PrefetchCount, azureConfig.ConcurrentMessageLimit);
        }
        return configurator;
    }
}

// 配置Bus时调用扩展方法
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
{
    cfg.Host("your-connection-string");
    cfg.ReceiveEndpoint("your-queue", e =>
    {
        e.PrefetchCount = 100;
        e.ConcurrentMessageLimit = 10;
        e.LogQueueSettings(_logger);
    });
});

方案三:结合Azure Service Bus管理客户端查询预取数

如果预取数是在Azure Portal或通过Azure SDK设置的(而非MassTransit硬编码),可使用ServiceBusAdministrationClient查询队列的实际预取值;并发消息限制是MassTransit客户端设置,仍需从MassTransit配置读取:

// 查询队列服务端预取数
var adminClient = new ServiceBusAdministrationClient("your-connection-string");
var queueProps = await adminClient.GetQueueAsync("your-queue");
_logger.LogInformation("队列 {Queue} 服务端预取数={Prefetch}", queueProps.Name, queueProps.PrefetchCount);

// 读取客户端并发消息限制配置
var busControl = Bus.Factory.CreateUsingAzureServiceBus(cfg =>
{
    cfg.Host("your-connection-string");
    cfg.ReceiveEndpoint("your-queue", e =>
    {
        e.ConcurrentMessageLimit = 10;
        _logger.LogInformation("队列 {Queue} 客户端并发消息限制={Concurrent}", e.InputAddress, e.ConcurrentMessageLimit);
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 17:45:32