使用ServiceBus时,Azure容器应用作业如何设置accurate scalingStrategy?
Azure Container Apps Job 结合 ServiceBus Receive-and-Delete 模式配置 KEDA Accurate 扩缩容策略
由于你采用的是Receive-and-Delete模式,消息被消费后会立即删除,KEDA需要通过accurate策略精准统计队列剩余消息数,避免扩缩容偏差。Azure可视化界面文档可能未明确提及该配置,但可通过ARM模板、Bicep或Azure CLI手动添加参数,具体方案如下:
方法1:用Bicep配置Container Apps Job的KEDA规则
在KEDA触发器的scalers块中,为ServiceBus类型的scaler添加scalingStrategy属性:
resource containerAppJob 'Microsoft.App/jobs@2024-03-01' = { name: 'your-job-name' location: resourceGroup().location properties: { environmentId: containerAppEnvironment.id template: { containers: [ { image: 'your-job-image' resources: { cpu: '0.25' memory: '0.5Gi' } } ] } triggers: { keda: { triggers: [ { type: 'azure-servicebus' metadata: { queueName: 'your-servicebus-queue' connectionFromEnvironment: 'SERVICEBUS_CONNECTION_STRING' messageCount: '1' // 每条消息触发一次Job } scalingStrategy: { type: 'accurate' // 指定accurate策略 } } ] pollingInterval: 30 minReplicaCount: 0 maxReplicaCount: 10 } } } }
方法2:用Azure CLI更新现有Job的KEDA配置
若Job已创建,可通过CLI命令修改触发器配置,添加scalingStrategy:
az containerapp job update \ --name your-job-name \ --resource-group your-rg-name \ --set triggers.keda.triggers[0].scalingStrategy.type=accurate
关键说明
accurate策略会直接查询ServiceBus队列的活跃消息数(Receive-and-Delete模式无锁定消息),KEDA将基于该数值精准扩缩Job实例数,确保每条消息触发一次Job。- 需保证ServiceBus连接字符串具备至少
Listen权限,以读取队列消息计数。
内容的提问来源于stack exchange,提问作者Byron Salty
相关产品推荐
相关产品推荐

