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

时间:2013-04-15 14:10:12

标签: c# asp.net-mvc azure azure-storage azureservicebus

我正在使用服务总线队列在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。

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

由于

2 个答案:

答案 0 :(得分:4)

如果要设置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

答案 1 :(得分:1)

更新Azure SDK 2.3

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

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