我正在使用服务总线队列在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。
如果您知道问题是什么,请告诉我
由于
答案 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门户中更改它。