如何更新Azure通知中心的Registration TTL配置?
Azure Notification Hub 修改Registration TTL为90天方案
问题根因
自API版本2017-04-01起,Azure Notification Hubs控制平面将RegistrationTtl属性标记为只读,当前Azure Portal、新版Azure CLI、新版C# Management SDK默认调用的都是2017及之后版本的API,提交的RegistrationTtl修改请求会被服务端静默忽略——不会返回报错,但配置不会实际更新。这也是数年前同操作可以正常生效的核心原因:早期服务端默认使用2016版API,该属性支持写入。
验证可用的修改方式
方式1:ARM模板部署(稳定性最高)
使用API版本2016-03-01(目前唯一稳定支持修改该属性的API版本)编写最小化部署模板,部署到通知中心所在资源组即可:
{ "$schema": "ARM部署模板标准schema定义", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.NotificationHubs/namespaces/notificationHubs", "apiVersion": "2016-03-01", "name": "[concat(parameters('namespaceName'), '/', parameters('hubName'))]", "location": "[resourceGroup().location]", "properties": { "registrationTtl": "P90D" } } ], "parameters": { "namespaceName": { "type": "string", "metadata": { "description": "Notification Hub所属命名空间名称" } }, "hubName": { "type": "string", "metadata": { "description": "待修改配置的Notification Hub名称" } } } }
部署完成后等待3-5分钟,即可在通知中心属性页看到TTL更新为90天。
方式2:Azure PowerShell直接调用API
无需编写模板,直接通过PowerShell调用控制平面接口修改:
# 登录Azure账号 Connect-AzAccount # 替换为自身环境的参数 $subscriptionId = "订阅ID" $resourceGroupName = "资源组名称" $namespaceName = "通知中心命名空间名称" $hubName = "通知中心名称" $apiVersion = "2016-03-01" # 构造请求地址 $requestUri = "https://management.azure.com/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.NotificationHubs/namespaces/$namespaceName/notificationHubs/$hubName`?api-version=$apiVersion" # 拉取现有通知中心配置 $hubConfig = Invoke-AzRestMethod -Method Get -Uri $requestUri $hubObj = $hubConfig.Content | ConvertFrom-Json # 更新TTL为90天(ISO 8601时长格式) $hubObj.properties.registrationTtl = "P90D" # 提交更新请求 $requestBody = $hubObj | ConvertTo-Json -Depth 10 Invoke-AzRestMethod -Method Put -Uri $requestUri -Payload $requestBody
避坑说明
- 不要使用数据平面的
NotificationHubClient类相关SDK修改该配置:RegistrationTtl是控制平面级别的资源属性,数据平面API无修改权限,之前调用的NotificationHubCreateOrUpdateParameters()如果属于数据平面SDK,本身就不支持修改该参数。 - 目前Azure Portal已隐藏全局Registration TTL的修改入口,界面上可见的TTL相关配置为临时注册过期策略,修改后不会改变全局注册生存时间。
- 配置生效后,存量超过90天未更新的注册记录会在服务端下一次清理周期内自动删除,后续新注册的设备若90天内未主动刷新注册信息,也会被自动清理。
内容的提问来源于stack exchange,提问作者David Palindrom
相关产品推荐
相关产品推荐

