如何解决ARM模板中的MessagingGatewayBadRequest错误?
问题:ARM模板创建Service Bus队列时出现MessagingGatewayBadRequest错误
使用ARM模板创建Service Bus命名空间和队列时,命名空间能成功创建,但队列创建失败,报错如下:
"code": "MessagingGatewayBadRequest",
"message": "SubCode=40000. Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions.return (<Code>400</Code>)
无法定位错误根源,队列配置并不复杂,且微软官方文档未提及该错误。
ARM模板
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "metadata": { "_generator": { "name": "bicep", "version": "0.5.6.12127", "templateHash": "15173749018276299351" } }, "parameters": { "environment": { "type": "string", "allowedValues": ["Dev", "Test", "Prod"], "metadata": { "description": "Environment for resource group" } }, "resourceTags": { "type": "object", "defaultValue": { "Environment": "[parameters('environment')]", "BillTo": "specialprojects", "Architecture": "AppService", "AlertName": "mgmt" } }, "serviceBusNamespaceName": { "type": "string", "metadata": { "description": "Name of the Service Bus namespace" } }, "queues": { "type": "array", "metadata": { "description": "Array of the Queue" } }, "location": { "type": "string", "defaultValue": "[resourceGroup().location]", "metadata": { "description": "Location for all resources." } } }, "resources": [ { "type": "Microsoft.ServiceBus/namespaces", "apiVersion": "2021-11-01", "name": "[toLower(parameters('serviceBusNamespaceName'))]", "location": "[parameters('location')]", "sku": { "name": "Standard" }, "properties": {}, "tags": "[parameters('resourceTags')]" }, { "type": "Microsoft.ServiceBus/namespaces/queues", "apiVersion": "2021-11-01", "name": "[format('{0}/{1}', toLower(parameters('serviceBusNamespaceName')), parameters('queues')[copyIndex()].name)]", "copy": { "name": "QueueCopy", "count": "[length(parameters('queues'))]" }, "properties": { "lockDuration": "PT5M", "maxSizeInMegabytes": 1024, "requiresDuplicateDetection": true, "requiresSession": false, "deadLetteringOnMessageExpiration": true, "duplicateDetectionHistoryTimeWindow": "PT10M", "maxDeliveryCount": 10, "enablePartitioning": false, "enableExpress": false, "maxMessageSizeInKilobytes": 10240, "autoDeleteOnIdle": "PT48H" }, "dependsOn": [ "[resourceId('Microsoft.ServiceBus/namespaces', toLower(parameters('serviceBusNamespaceName')))]" ], "tags": "[parameters('resourceTags')]" } ] }
参数文件 (parameters.json)
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "environment": { "value": "Dev" }, "serviceBusNamespaceName": { "value": "c4p-dev" }, "queues": { "value": [ { "name": "dmp" }, { "name": "smp" }, { "name": "auction" } ] } } }
错误详情
{ "code": "DeploymentFailed", "message": "At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.", "details": [ { "code": "MessagingGatewayBadRequest", "message": "<Error><Code>400</Code><Detail>SubCode=40000. Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:06e867e5-289e-4fdd-956c-2b9684760455_G8, SystemTracker:c4p-dev.servicebus.windows.net:smp, Timestamp:2022-08-11T14:50:04</Detail></Error>" }, { "code": "MessagingGatewayBadRequest", "message": "<Error><Code>400</Code><Detail>SubCode=40000. Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:5fbdd148-e1c9-4db9-90ac-4ae9dc966ad9_G0, SystemTracker:c4p-dev.servicebus.windows.net:auction, Timestamp:2022-08-11T14:50:04</Detail></Error>" }, { "code": "MessagingGatewayBadRequest", "message": "<Error><Code>400</Code><Detail>SubCode=40000. Bad Request. To know more visit https://aka.ms/sbResourceMgrExceptions. . TrackingId:005c726d-e8fc-46cc-bd97-d9e688e9cab6_G17, SystemTracker:c4p-dev.servicebus.windows.net:dmp, Timestamp:2022-08-11T14:50:04</Detail></Error>" } ] }

解决方案
问题根源在于使用了已弃用的API属性:
在2021-11-01版本的Service Bus API中,maxMessageSizeInKilobytes属性已被弃用,取而代之的是maxMessageSizeInBytes。当模板中使用这个弃用属性并设置值时,会触发400错误。
你设置的10240 KB对应10MB,转换成字节为10485760。修改队列的properties配置,替换属性并设置正确值即可解决问题:
"properties": { "lockDuration": "PT5M", "maxSizeInMegabytes": 1024, "requiresDuplicateDetection": true, "requiresSession": false, "deadLetteringOnMessageExpiration": true, "duplicateDetectionHistoryTimeWindow": "PT10M", "maxDeliveryCount": 10, "enablePartitioning": false, "enableExpress": false, "maxMessageSizeInBytes": 10485760, "autoDeleteOnIdle": "PT48H" }
另外,也可以直接移除这个属性,因为Service Bus Standard层的默认消息大小就是10MB,无需额外配置。
内容的提问来源于stack exchange,提问作者GThree
相关产品推荐
相关产品推荐

