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

Azure Container Apps搭配ASB无法缩容至0副本的问题排查

问题

我有一个容器化的.NET 8.0控制台应用,已部署至ACR并运行在Azure Container Apps上。该应用基于MassTransit构建,使用Azure Service Bus队列,运行正常,但即使无任何请求,始终有1个活跃副本在运行。我尝试过基于队列和连接的两种缩放规则,均无效果。与相关已知问题不同,我未使用密钥库引用,所有机密均为Container Apps Secrets。

以下是我的资源配置JSON:

{
    "id": "<redacted>",
    "name": "<redacted>",
    "type": "Microsoft.App/containerApps",
    "location": "West Europe",
    "tags": {
        "created_by": "cdktf",
        "environment": "Staging"
    },
    "systemData": {
        "createdBy": "1a6afc85-d01a-45ad-8de2-4aa26f74828d",
        "createdByType": "Application",
        "createdAt": "2023-12-12T10:39:02.4044595",
        "lastModifiedBy": "1a6afc85-d01a-45ad-8de2-4aa26f74828d",
        "lastModifiedByType": "Application",
        "lastModifiedAt": "2023-12-19T07:47:57.7108815"
    },
    "properties": {
        "provisioningState": "Succeeded",
        "runningStatus": "Running",
        "managedEnvironmentId": "<redacted>",
        "environmentId": "<redacted>",
        "workloadProfileName": null,
        "outboundIpAddresses": [
            "<redacted>"
        ],
        "latestRevisionName": "<redacted>--8psntt0",
        "latestReadyRevisionName": "<redacted>--8psntt0",
        "latestRevisionFqdn": "",
        "customDomainVerificationId": "<redacted>",
        "configuration": {
            "secrets": [
                {
                    "name": "container-registry-admin-password"
                },
                {
                    "name": "servicebus"
                }
            ],
            "activeRevisionsMode": "Single",
            "ingress": null,
            "registries": [
                {
                    "server": "<redacted>",
                    "username": "<redacted>",
                    "passwordSecretRef": "container-registry-admin-password",
                    "identity": ""
                }
            ],
            "dapr": null,
            "maxInactiveRevisions": null,
            "service": null
        },
        "template": {
            "revisionSuffix": "",
            "terminationGracePeriodSeconds": null,
            "containers": [
                {
                    "image": "<redacted>",
                    "name": "processor",
                    "args": [
                        "dotnet",
                        "Processor.dll"
                    ],
                    "env": [
                        {
                            "name": "DOTNET_ENVIRONMENT",
                            "value": "Staging"
                        }
                    ],
                    "resources": {
                        "cpu": 1,
                        "memory": "2Gi",
                        "ephemeralStorage": "4Gi"
                    },
                    "probes": []
                }
            ],
            "initContainers": null,
            "scale": {
                "minReplicas": null,
                "maxReplicas": 5,
                "rules": [
                    {
                        "name": "order-accepted",
                        "azureQueue": {
                            "queueName": "order-accepted",
                            "queueLength": 10,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    },
                    {
                        "name": "order-fulfilled",
                        "azureQueue": {
                            "queueName": "order-fulfilled",
                            "queueLength": 10,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    },
                    {
                        "name": "order-rejected",
                        "azureQueue": {
                            "queueName": "order-rejected",
                            "queueLength": 10,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    },
                    {
                        "name": "order-state",
                        "azureQueue": {
                            "queueName": "order-state",
                            "queueLength": 10,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    },
                    {
                        "name": "process-order",
                        "azureQueue": {
                            "queueName": "process-order",
                            "queueLength": 5,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    },
                    {
                        "name": "submit-order",
                        "azureQueue": {
                            "queueName": "submit-order",
                            "queueLength": 10,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    },
                    {
                        "name": "validation",
                        "azureQueue": {
                            "queueName": "validation",
                            "queueLength": 10,
                            "auth": [
                                {
                                    "secretRef": "servicebus",
                                    "triggerParameter": "connection"
                                }
                            ]
                        }
                    }
                ]
            },
            "volumes": [],
            "serviceBinds": null
        },
        "eventStreamEndpoint": "<redacted>"
    },
    "identity": {
        "type": "None"
    }
}

超过7分钟后,容器仍处于运行状态。请问是MassTransit针对ASB设置的AutoStart = true导致该现象,还是我的Container Apps配置存在问题?

分析与解决建议
  • Container Apps 配置是核心原因:
    你的配置中minReplicas设为null,Azure Container Apps的默认行为是:当未显式设置minReplicas: 0时,即使缩放规则触发到0副本,系统也会保留至少1个副本运行。要实现无请求时缩放到0,必须明确将scale.minReplicas配置为0。
  • MassTransit的AutoStart=true不影响缩放:
    AutoStart=true仅控制MassTransit内部是否自动启动队列监听,属于应用逻辑层面。Azure Container Apps的缩放基于队列长度等外部指标,和应用内部的监听状态无关,不会因为应用启动了监听就阻止缩容。
  • 额外排查要点:
    1. 确认队列连接字符串权限:确保servicebus机密对应的连接字符串拥有读取队列长度的权限(至少需要Azure Service Bus Data Reader角色或等效共享访问权限),权限不足会导致系统无法获取队列指标,无法触发缩容。
    2. 检查容器应用日志:查看是否有缩放规则相关的错误日志,比如无法访问队列导致指标读取失败,这类问题会让系统无法正确执行缩容逻辑。
    3. 验证队列状态:确认所有配置的队列在无请求时确实处于0消息状态,若某队列存在未处理消息,会导致副本无法缩容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:46:20