如何更改服务总线队列的属性?

我正在使用服务总线队列在Web角色和工作者角色之间进行通信。 有时工作者角色不接受Web角色消息。 但它立即接受我发送的下一条消息。 所以我想也许它正在发生,因为批处理操作已启用。 我一直试图把它弄错,但我还没有成功。 这是我的代码。

public static QueueClient GetServiceBusQueueClient(string queuename) { string connectionString; if (RoleEnvironment.IsAvailable) connectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString"); else connectionString = ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"]; var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString); QueueDescription queue = null; if (!namespaceManager.QueueExists(queuename)) { queue = namespaceManager.CreateQueue(queuename); queue.EnableBatchedOperations = false; queue.MaxDeliveryCount = 1000; } else { queue = namespaceManager.GetQueue(queuename); queue.EnableBatchedOperations = false; queue.MaxDeliveryCount = 1000; } MessagingFactorySettings mfs = new MessagingFactorySettings(); mfs.NetMessagingTransportSettings.BatchFlushInterval = TimeSpan.Zero; string issuer; string accessKey; if (RoleEnvironment.IsAvailable) issuer = RoleEnvironment.GetConfigurationSettingValue("AZURE_SERVICEBUS_ISSUER"); else issuer = ConfigurationManager.AppSettings["AZURE_SERVICEBUS_ISSUER"]; if (RoleEnvironment.IsAvailable) accessKey = RoleEnvironment.GetConfigurationSettingValue("AZURE_SERVICEBUS_ACCESS_KEY"); else accessKey = ConfigurationManager.AppSettings["AZURE_SERVICEBUS_ACCESS_KEY"]; mfs.TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuer, accessKey); MessagingFactory messagingFactory = MessagingFactory.Create(namespaceManager.Address, mfs); QueueClient Client = messagingFactory.CreateQueueClient(queue.Path); return Client; } 

但EnableBatchedOperations始终为true,默认情况下MaxDeliveryCount始终为10。

如果您知道问题是什么,请告诉我

谢谢

如果要设置EnabledBatchedOperations ,则必须创建队列之前执行此操作。 您可以通过创建QueueDescription对象然后将其传递给CreateQueue方法来实现。 例如:

 QueueDescription orderQueueDescription = new QueueDescription(queuename) { RequiresDuplicateDetection = true, MaxDeliveryCount = 1000, }; namespaceMgr.CreateQueue(orderQueueDescription); 

更新:

文档非常明确:

由于在创建消息传递实体后无法更改元数据,因此修改重复检测行为需要删除并重新创建队列。 同样的原则适用于任何其他元数据。 [1]

QueueDescription 表示队列的元数据描述。

[1] http://msdn.microsoft.com/en-us/library/windowsazure/hh532012.aspx

更新Azure SDK 2.3

除了挂起或恢复队列之外,NamespaceManager上的UpdateQueue方法仍然不允许您更新任何属性。

如果您需要在现有队列上更改MaxDeliveryCount,并且您不想删除并重新创建队列,则唯一的选择是在Azure门户中更改它。