/// <summary> /// Create response queue/blob container for the specified session. /// </summary> private void CreateResponseStorage() { this.CreateStorageClient(RetryPolicyForResponseStorage); if (this.responseQueue == null) { BrokerTracing.TraceVerbose( "[ResponseQueueManager].CreateResponseStorage: Try to create the response queue {0}", this.responseStorageName); CloudQueue queue = this.queueClient.GetQueueReference(this.responseStorageName); AzureQueueManager.CreateQueueWithRetry(queue); if (Interlocked.CompareExchange <CloudQueue>(ref this.responseQueue, queue, null) == null) { BrokerTracing.EtwTrace.LogQueueCreatedOrExist(this.sessionId, this.responseStorageName); } } if (this.responseContainer == null) { BrokerTracing.TraceVerbose( "[ResponseQueueManager].CreateResponseStorage: Try to create the response container {0}", this.responseStorageName); CloudBlobContainer container = this.blobClient.GetContainerReference(this.responseStorageName); AzureQueueManager.CreateContainerWithRetry(container); Interlocked.CompareExchange <CloudBlobContainer>(ref this.responseContainer, container, null); } }
/// <summary> /// Create request queue for specified Azure service. /// </summary> /// <param name="azureServiceName">azure service name</param> public void CreateRequestStorage(string azureServiceName) { this.requestStorage.GetOrAdd( azureServiceName, (key) => { string requestStorageName = SoaHelper.GetRequestStorageName(this.clusterId.ToString(), key); BrokerTracing.TraceVerbose( "[AzureQueueManager].CreateRequestStorage: Try to create the request storage {0} for Azure service {1}", requestStorageName, key); this.CreateStorageClient(RetryPolicyForRequestStorage); CloudQueue queue = this.queueClient.GetQueueReference(requestStorageName); AzureQueueManager.CreateQueueWithRetry(queue); CloudBlobContainer container = this.blobClient.GetContainerReference(requestStorageName); AzureQueueManager.CreateContainerWithRetry(container); if (Interlocked.CompareExchange(ref this.requestQueueExist, 1, 0) == 0) { BrokerTracing.EtwTrace.LogQueueCreatedOrExist(this.sessionId, requestStorageName); } return(new Tuple <CloudQueue, CloudBlobContainer>(queue, container)); }); }