如何在Azure函数中动态设置Azure Service Bus主题订阅的MaxDeliveryCount
解决Azure Service Bus主题订阅MaxDeliveryCount设置不生效问题
你的代码只修改了内存中订阅对象的属性,没有把变更提交到Service Bus服务端,这就是设置不生效的原因。Service Bus Explorer也是通过调用管理API实现的配置修改,所以完全可以用代码实现,不需要依赖门户操作。
方法一:基于原有NamespaceManager实现
修改代码,在修改属性后调用UpdateSubscription方法提交变更:
var manager = NamespaceManager.CreateFromConnectionString(connectionString); var subscription = manager.GetSubscription("topic", "subscription"); // 修改属性 subscription.MaxDeliveryCount = 10; // 提交变更到服务端 manager.UpdateSubscription(subscription);
方法二:使用最新Azure Service Bus管理客户端(推荐)
NamespaceManager属于旧版Microsoft.Azure.ServiceBus SDK,微软现在推荐使用Azure.Messaging.ServiceBus.Administration下的管理客户端,更稳定且支持更多新特性:
using Azure.Messaging.ServiceBus.Administration; var adminClient = new ServiceBusAdministrationClient(connectionString); // 获取订阅属性 var subscriptionProperties = await adminClient.GetSubscriptionAsync("topic", "subscription"); // 修改MaxDeliveryCount subscriptionProperties.MaxDeliveryCount = 10; // 提交更新 await adminClient.UpdateSubscriptionAsync(subscriptionProperties);
注意:无论用哪种方式,确保你的连接字符串拥有管理权限(需要包含Manage权限的Shared Access Policy),否则会因权限不足导致修改失败。
内容的提问来源于stack exchange,提问作者andersmi
相关产品推荐
相关产品推荐

