1

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

如果您知道问题所在,请告诉我

谢谢

4

2 回答 2

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

于 2013-04-15T14:23:45.857 回答
1

更新 Azure SDK 2.3

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

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

于 2014-06-04T20:07:38.397 回答