Exemplo n.º 1
0
        public void AddResponseQueues(string clientData, int sessionHash)
        {
            lock (this.dicSyncLock)
            {
                if (!this.responseMessageClients.Keys.Contains(sessionHash))
                {
                    string     responseStorageName = SoaHelper.GetResponseStorageName(this.clusterHash, this.SessionId, sessionHash);
                    CloudQueue responseQueue       = this.queueClient.GetQueueReference(responseStorageName);
                    CreateQueueWithRetry(responseQueue);

                    if (this.SessionId == SessionStartInfo.StandaloneSessionId)
                    {
                        responseQueue.Clear();
                    }

                    // use default retry option for the cloud queue
                    CloudBlobContainer responseBlobContainer = this.blobClient.GetContainerReference(responseStorageName);
                    CreateContainerWithRetry(responseBlobContainer);

                    // use default retry option for the cloud blob
                    SharedAccessQueuePolicy queuePolicy =
                        new SharedAccessQueuePolicy()
                    {
                        Permissions = SharedAccessQueuePermissions.ProcessMessages, SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7)
                    };
                    string responseQueueUri = string.Join(string.Empty, responseQueue.Uri, responseQueue.GetSharedAccessSignature(queuePolicy));

                    SharedAccessBlobPolicy blobPolicy = new SharedAccessBlobPolicy()
                    {
                        Permissions = SharedAccessBlobPermissions.Read | SharedAccessBlobPermissions.Delete, SharedAccessExpiryTime = DateTime.UtcNow.AddDays(7)
                    };
                    string responseBlobUri = string.Join(string.Empty, responseBlobContainer.Uri, responseBlobContainer.GetSharedAccessSignature(blobPolicy));

                    this.responseMessageClients.Add(sessionHash, Tuple.Create(new ConcurrentQueue <Message>(), new AzureStorageClient(responseQueue, responseBlobContainer)));
                    this.responseClientUris.Add(sessionHash, Tuple.Create(responseQueueUri, responseBlobUri));
                }

                if (!this.sessionClientData.Keys.Contains(clientData))
                {
                    this.sessionClientData.Add(clientData, sessionHash);
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Create message retriever to monitor the response queue and gets
        /// messages from it.
        /// </summary>
        /// <param name="jobId">job Id</param>
        /// <param name="jobRequeueCount">job re-queue count</param>
        /// <returns>response storage name</returns>
        public string Start(string jobId, int jobRequeueCount)
        {
            string responseStorageName = SoaHelper.GetResponseStorageName(this.clusterId.ToString(), jobId, jobRequeueCount);

            ResponseQueueManager manager =
                this.responseQueueManagers.GetOrAdd(
                    responseStorageName,
                    (key) =>
            {
                BrokerTracing.TraceVerbose(
                    "[AzureQueueManager].Start: Create the ResponseQueueManager, job requeue count {0}, {1}",
                    key,
                    responseStorageName);

                return(new ResponseQueueManager(this, this.sessionId, responseStorageName, this.StorageConnectionString));
            });

            // Following method only start manager once.
            manager.Start();

            return(responseStorageName);
        }