static void Main(string[] args)
        {
            NamespaceManager manager = NamespaceManager.Create(); // Automatycznie bierze informacje z App.config
            //Wolę na początku - wygodniej "zaczynamy" zawsze od zera
            manager.DeleteTopic("obliczenia"); //Kasuje temat i subskrypcje
            manager.DeleteQueue("wynik");

            //Tworzenie Topics - tematu
            TopicDescription td = new TopicDescription("obliczenia");

            //Nie przewidujemy dużego ruchu nie wymagamy partycjonowania
            td.EnablePartitioning = false;
            //Wymagamy wykrywania duplikatów - by klient 2 razy nie wysłał tego samego polecenia
            td.RequiresDuplicateDetection = true;
            //Nie pozwalamy na tematy tylko w pamięci; chcemy żeby klient był pewien że wysłał wiadomość = wiadomość zostanie przetworzona
            td.EnableExpress = false;
            manager.CreateTopic(td); //Tworzenie tematu

            //Suma i średnia będzie wyliczana gdy opowiednia własciwość zostanie zdefiniowana
            manager.CreateSubscription("obliczenia", "suma", new SqlFilter("suma=1"));
            manager.CreateSubscription("obliczenia", "srednia", new SqlFilter("srednia=1"));
            //Ale zawsze będą liczone elementy w komunikacie
            manager.CreateSubscription("obliczenia", "liczba");

            QueueDescription qd = new QueueDescription("wynik");
            qd.RequiresSession = true;
            manager.CreateQueue(qd);
        }
Example #2
0
        public string GetQueuePath(QueueDescription queueDescription)
        {
            IEnumerable<string> segments = new[] {_settings.ServiceUri.AbsolutePath.Trim('/'), queueDescription.Path.Trim('/')}
                .Where(x => x.Length > 0);

            return string.Join("/", segments);
        }
        public ActionResult Newsletter(string email)
        {
            var nm = NamespaceManager.CreateFromConnectionString(ConnectionString);

            QueueDescription qd = new QueueDescription(qname);
            qd.MaxSizeInMegabytes = 2048;
            qd.DefaultMessageTimeToLive = new TimeSpan(0, 5, 0);

            if (!nm.QueueExists(qname))
            {
                nm.CreateQueue(qd);
            }

            //Send to the queue
            QueueClient qc = QueueClient.CreateFromConnectionString(ConnectionString, qname);

            // Create amessage with email property
            var bm = new BrokeredMessage();
            bm.Properties["email"] = email;
            qc.Send(bm);

            ViewBag.email = email;

            return View();
        }
        public void LoadConfig()
        {
            Trace.TraceInformation("Initializing and configuring Azure service bus queue");

            string connectionString =
                CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString");

            var namespaceManager =
                NamespaceManager.CreateFromConnectionString(connectionString);

            if (!namespaceManager.QueueExists(QueueName))
            {
                namespaceManager.CreateQueue(QueueName);
            }

            // Configure Queue Settings
            QueueDescription qd = new QueueDescription(QueueName)
            {
                MaxSizeInMegabytes = 5120,
                DefaultMessageTimeToLive = new TimeSpan(0, 1, 0)
            };

            WorkHistoryDataTable = new DataSetMobile.WorkHistoryDataTable();

            WorkHistoryTableAdapter = new WorkHistoryTableAdapter();

            Trace.TraceInformation("Creating queue client from service bus connection string");
            MobleQueueClient =
                QueueClient.CreateFromConnectionString(connectionString, QueueName);
        }
        public override bool OnStart()
        {
            // Set the maximum number of concurrent connections
            ServicePointManager.DefaultConnectionLimit = 12;

            MefLoader.Initialize();
            // Create the queue if it does not exist already
            string connectionString = CloudConfigurationManager.GetSetting("ServiceBus");
            string queueName = ConfigurationsSelector.GetSetting("Customer.Queue");
            NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
            QueueDescription queueDescription = new QueueDescription(queueName)
            {
                MaxSizeInMegabytes = 1024,
                DefaultMessageTimeToLive = TimeSpan.FromMinutes(10),
                EnablePartitioning = false, //I want to ensure the messages will processed in the right order
                EnableDeadLetteringOnMessageExpiration = true,
                LockDuration = TimeSpan.FromMinutes(5)
            };

            if (!namespaceManager.QueueExists(queueName))
                namespaceManager.CreateQueue(queueDescription);

            // Initialize the connection to Service Bus Queue
            _client = QueueClient.CreateFromConnectionString(connectionString, queueName);
            return base.OnStart();
        }
Example #6
0
        private static void QueueMessage(string messageType, VirtualMachine virtualMachine)
        {
            if (VirtualMachine.IsValid(virtualMachine) == false)
            {
                throw new ArgumentException("Invalid virtual machine.", "virtualMachine");
            }

            var connectionString = CloudConfigurationManager.GetSetting("ServiceBus.ConnectionString");
            var queueName = CloudConfigurationManager.GetSetting("QueueName");

            var namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);

            if (!namespaceManager.QueueExists(queueName))
            {
                var queue = new QueueDescription(queueName)
                {
                    DefaultMessageTimeToLive = new TimeSpan(7, 0, 0, 0)
                };

                namespaceManager.CreateQueue(queue);
            }

            var message = PrepareMessage(messageType, virtualMachine);

            var client = QueueClient.CreateFromConnectionString(connectionString, queueName);

            client.Send(message);
        }
        public Consumer()
        {
            Console.Write("Your Service Namespace: ");
            string serviceNamespace = Console.ReadLine();
            Console.Write("Your Issuer Name: ");
            string issuerName = Console.ReadLine();
            Console.Write("Your Issuer Secret: ");
            string issuerSecret = Console.ReadLine();

            // Configure queue settings.
            this.queueDescription = new QueueDescription(MyQueuePath);
            // Setting Max Size and TTL for demonstration purpose
            // but can be changed per user discretion to suite their system needs.
            // Refer service bus documentation to understand the limitations.
            // Setting Queue max size to 1GB where as default Max Size is 5GB.
            this.queueDescription.MaxSizeInMegabytes = 1024;
            // Setting message TTL to 5 days where as default TTL is 14 days.
            this.queueDescription.DefaultMessageTimeToLive = TimeSpan.FromDays(5);
            
            // Create management credentials.
            this.credential = new TransportClientEndpointBehavior() 
            {
                TokenProvider = TokenProvider.CreateSharedSecretTokenProvider(issuerName, issuerSecret)
            };
 
            // Create the URI for the queue.
            this.namespaceUri = ServiceBusEnvironment.CreateServiceUri("sb", serviceNamespace, String.Empty);
            Console.WriteLine("Service Bus Namespace Uri address '{0}'", this.namespaceUri.AbsoluteUri);
        }
 private async static Task QueueShouldExistAsync(NamespaceManager ns, QueueDescription queueDescription)
 {
     if (!await ns.QueueExistsAsync(queueDescription.Path))
     {
         throw new MessagingEntityNotFoundException("Queue: " + queueDescription.Path);
     }
 }
		public QueueClient Create(Address address)
		{
			var queueName = address.Queue;
			try
			{
				if (!NamespaceClient.QueueExists(queueName))
				{
					var description = new QueueDescription(queueName)
						{
							LockDuration = LockDuration,
							MaxSizeInMegabytes = MaxSizeInMegabytes,
							RequiresDuplicateDetection = RequiresDuplicateDetection,
							RequiresSession = RequiresSession,
							DefaultMessageTimeToLive = DefaultMessageTimeToLive,
							EnableDeadLetteringOnMessageExpiration = EnableDeadLetteringOnMessageExpiration,
							DuplicateDetectionHistoryTimeWindow = DuplicateDetectionHistoryTimeWindow,
							MaxDeliveryCount = MaxDeliveryCount,
							EnableBatchedOperations = EnableBatchedOperations
						};

					NamespaceClient.CreateQueue(description);
				}
			}
			catch (MessagingEntityAlreadyExistsException)
			{
				// the queue already exists or another node beat us to it, which is ok
			}

			var client = Factory.CreateQueueClient(queueName, ReceiveMode.PeekLock);
			client.PrefetchCount = 100; // todo make configurable
			return client;
		}
 public bool Equals(QueueDescription other)
 {
     if (ReferenceEquals(null, other))
         return false;
     if (ReferenceEquals(this, other))
         return true;
     return Equals(other.Path, Path);
 }
        public void Connect(string connectionString, string queueName, QueueDescription queueDescription = null)
        {
            this.VerifyQueue(connectionString, queueName, queueDescription);

            this.serviceBus.Connect(connectionString, queueName);

            this.AddServiceBusSubscription();
        }
        static IEnumerable<string> GetQueryStringOptions(QueueDescription settings)
        {
            if (settings.EnableExpress)
                yield return "express=true";

            if (settings.AutoDeleteOnIdle > TimeSpan.Zero)
                yield return $"autodelete={settings.AutoDeleteOnIdle.TotalSeconds}";
        }
        public async Task <QueueDefinition> CreateQueue(IWorkContext context, QueueDefinition queueDefinition)
        {
            context.Verify(nameof(context)).IsNotNull();
            queueDefinition.Verify(nameof(queueDefinition)).IsNotNull();

            QueueDescription createdDescription = await _managementClient.CreateQueueAsync(queueDefinition.ConvertTo(), context.CancellationToken);

            return(createdDescription.ConvertTo());
        }
        public void CreateAndDeleteQueue_WhenUserHasManagePermission_Success()
        {
            string queueName = Guid.NewGuid().ToString();
            var queue = new QueueDescription(queueName);

            NamespaceManager nsManager = ServiceBusHelper.GetNamespaceManager();
            nsManager.CreateQueue(queue);
            nsManager.DeleteQueue(queueName);
        }
 static void CreateQueue(Uri baseAddress,string queueName,QueueDescription queueDescription,TokenProvider credentials)
 { 
    if(QueueExists(baseAddress,queueName,credentials))
    {
       DeleteQueue(baseAddress,queueName,credentials);
    }  
    NamespaceManager namespaceClient = new NamespaceManager(baseAddress,credentials);
    namespaceClient.CreateQueue(queueDescription);
 }
        public void CreateQueue_WhenUserDoesNotHaveManagePermission_UnauthorizedAccessExceptionIsThrown()
        {
            string queueName = Guid.NewGuid().ToString();
            var queue = new QueueDescription(queueName);

            NamespaceManager nsManager = GetNamespaceManagerWithCustomCredentials(TestUsers.User1);

            Assert.Throws<UnauthorizedAccessException>(() => nsManager.CreateQueue(queue));
        }
Example #17
0
        static void CreateQueue(NamespaceManager namespaceManager, string path, bool requiresSessions,
                                int maxDeliveryCount)
        {
            var description = new QueueDescription(path);

            description.RequiresSession  = requiresSessions;
            description.MaxDeliveryCount = maxDeliveryCount;
            namespaceManager.CreateQueue(description);
        }
        public static Uri GetInputAddress(this ServiceBusHostSettings hostSettings, QueueDescription queueDescription)
        {
            var builder = new UriBuilder(hostSettings.ServiceUri);

            builder.Path += queueDescription.Path;
            builder.Query += string.Join("&", GetQueryStringOptions(queueDescription));

            return builder.Uri;
        }
        private async static Task QueueCreateAsync(NamespaceManager ns, QueueDescription queueDescription)
        {
            if (!await ns.QueueExistsAsync(queueDescription.Path))
            {
                await ns.CreateQueueAsync(queueDescription);

                ServiceBusEventSource.Log.CreatedQueue(ns.Address.ToString(), queueDescription.Path);
            }
        }
        public async Task <QueueDefinition> GetQueue(IWorkContext context, string queueName)
        {
            context.Verify(nameof(context)).IsNotNull();
            queueName.Verify(nameof(queueName)).IsNotEmpty();

            QueueDescription queueDescription = await _managementClient.GetQueueAsync(queueName, context.CancellationToken);

            return(queueDescription.ConvertTo());
        }
        CreateSendOnlyQueue(
            string name)
        {
            var queueDescription = new QueueDescription(name) {
                Status = EntityStatus.ReceiveDisabled
            };

            return await this.CreateQueueInternal(queueDescription);
        }
        public async static Task<QueueClient> EnsureQueueAsync(this MessagingFactory factory, QueueDescription queueDescription, ReceiveMode mode = ReceiveMode.PeekLock)
        {
            await new NamespaceManager(factory.Address, factory.GetSettings().TokenProvider)
                .TryCreateEntity(
                    mgr => QueueCreateAsync(mgr, queueDescription),
                    mgr => QueueShouldExistAsync(mgr, queueDescription));

            return factory.CreateQueueClient(queueDescription.Path, mode);
        }
Example #23
0
        internal void EnsureQueueExists(string queuePath)
        {
            if (_knownQueues.Value.Contains(queuePath))
            {
                return;
            }

            lock (LockFor(queuePath))
            {
                if (_knownQueues.Value.Contains(queuePath))
                {
                    return;
                }

                _logger.Debug("Creating queue '{0}'", queuePath);

                var queueDescription = new QueueDescription(queuePath)
                {
                    MaxDeliveryCount         = _maxDeliveryAttempts,
                    DefaultMessageTimeToLive = TimeSpan.MaxValue,
                    EnableDeadLetteringOnMessageExpiration = true,
                    EnableBatchedOperations    = true,
                    LockDuration               = _defaultMessageLockDuration,
                    RequiresDuplicateDetection = false,
                    RequiresSession            = false,
                    SupportOrdering            = false,
                    AutoDeleteOnIdle           = _autoDeleteOnIdle,
                };

                // We don't check for queue existence here because that introduces a race condition with any other bus participant that's
                // launching at the same time. If it doesn't exist, we'll create it. If it does, we'll just continue on with life and
                // update its configuration in a minute anyway.  -andrewh 8/12/2013
                try
                {
                    _namespaceManager().CreateQueue(queueDescription);
                }
                catch (MessagingEntityAlreadyExistsException)
                {
                }
                catch (MessagingException exc)
                {
                    if (!exc.Message.Contains("SubCode=40901"))
                    {
                        throw;
                    }

                    // SubCode=40901. Another conflicting operation is in progress. Let's see if it's created the queue for us.
                    if (!_namespaceManager().QueueExists(queuePath))
                    {
                        throw new BusException("Queue creation for '{0}' failed".FormatWith(queuePath), exc);
                    }
                }

                _knownQueues.Value.Add(queuePath);
            }
        }
Example #24
0
    private static async Task OverrideQueueLockDuration(string queuePath, string connectionString)
    {
        var managementClient = new ManagementClient(connectionString);
        var queueDescription = new QueueDescription(queuePath)
        {
            LockDuration = TimeSpan.FromSeconds(30)
        };

        await managementClient.UpdateQueueAsync(queueDescription).ConfigureAwait(false);
    }
Example #25
0
        public void UpdateQueue([FromBody] QueueDetails queueData)
        {
            NamespaceManager namespaceManager = CreateNamespaceManager();

            QueueDescription description = namespaceManager.GetQueue(queueData.name);

            queueData.ApplyChangesToDescription(description);

            namespaceManager.UpdateQueue(description);
        }
Example #26
0
        public async Task <QueueDefinition> Create(QueueDefinition queueDefinition, CancellationToken token)
        {
            queueDefinition.VerifyNotNull(nameof(queueDefinition));

            QueueDescription createdDescription = await _managementClient.CreateQueueAsync(queueDefinition.ConvertTo(), token);

            _logging.LogTrace($"{nameof(Create)}: QueueName={queueDefinition.QueueName}");

            return(createdDescription.ConvertTo());
        }
        private async static Task QueueCreateAsync(NamespaceManager ns, QueueDescription queueDescription)
        {
            if (!await ns.QueueExistsAsync(queueDescription.Path).ConfigureAwait(false))
            {
                await ns.CreateQueueAsync(queueDescription)
                .ConfigureAwait(false);

                ServiceBusEventSource.Log.CreatedQueue(ns.Address.ToString(), queueDescription.Path);
            }
        }
Example #28
0
        private void buttonDeleteQueue_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("Are you sure you want to permanently delete this queue and all messages within it?", "Confirmation", MessageBoxButton.OKCancel, MessageBoxImage.Warning, MessageBoxResult.Cancel) == MessageBoxResult.OK)
            {
                MessageBox.Show("Deleted queues can take up to 60 seconds to be removed.", "Notice", MessageBoxButton.OK, MessageBoxImage.Information);

                QueueDescription qd = (QueueDescription)this.gridQueues.SelectedItem;
                this.queueAdmin.DeleteQueue(qd.Url);
            }
        }
Example #29
0
        private static QueueDescription CreateQueueDescription(bool sessionEnabled, string queueName)
        {
            var qd = new QueueDescription(queueName)
            {
                RequiresSession  = sessionEnabled,
                AutoDeleteOnIdle = TimeSpan.FromMinutes(5)
            };

            return(qd);
        }
        CreateSendOnlyQueue(
            string name)
        {
            var queueDescription = new QueueDescription(name)
            {
                Status = EntityStatus.ReceiveDisabled
            };

            return(await this.CreateQueueInternal(queueDescription));
        }
        public void VerifyQueue(string connectionString, QueueDescription description)
        {
            var namespaceManager =
                NamespaceManager.CreateFromConnectionString(connectionString);

            if (!namespaceManager.QueueExists(description.Path))
            {
                namespaceManager.CreateQueue(description);
            }
        }
        private static QueueClient CreateQueueClient(QueueDescription queueDescription)
        {
            Uri runtimeUri = ServiceBusEnvironment.CreateServiceUri("sb", Sender.serviceBusNamespace, string.Empty);

            messagingFactory = MessagingFactory.Create(
                runtimeUri,
                TokenProvider.CreateSharedAccessSignatureTokenProvider(serviceBusKeyName, serviceBusKey));

            return(messagingFactory.CreateQueueClient(queueDescription.Path));
        }
        public void PathToThrowsArgumentOutOfRangeException(string baseUrl, int lengthOfName)
        {
            var longName = string.Join(string.Empty, Enumerable.Repeat('a', lengthOfName));
            var sub      = new QueueDescription("Fake SubscriptionName");

            var ex = Assert.Throws <ArgumentOutOfRangeException>(() => sub.Name = $"{baseUrl}{longName}");

            Assert.AreEqual($"Entity path '{longName}' exceeds the '260' character limit.{Environment.NewLine}Parameter name: Name", ex.Message);
            Assert.AreEqual($"Name", ex.ParamName);
        }
    public void ForwardDeadLetteredMessagesToThrowsArgumentOutOfRangeException(string baseUrl, int lengthOfName)
    {
        var longName = string.Join(string.Empty, Enumerable.Repeat('a', lengthOfName));
        var sub      = new QueueDescription("Fake SubscriptionName");

        var ex = Assert.Throws <ArgumentOutOfRangeException>(() => sub.ForwardDeadLetteredMessagesTo = $"{baseUrl}{longName}");

        Assert.StartsWith($"Entity path '{longName}' exceeds the '260' character limit.", ex.Message);
        Assert.Equal($"ForwardDeadLetteredMessagesTo", ex.ParamName);
    }
Example #35
0
        static void CreateQueue(Uri baseAddress, string queueName, QueueDescription queueDescription, TokenProvider credentials)
        {
            if (QueueExists(baseAddress, queueName, credentials))
            {
                DeleteQueue(baseAddress, queueName, credentials);
            }
            NamespaceManager namespaceClient = new NamespaceManager(baseAddress, credentials);

            namespaceClient.CreateQueue(queueDescription);
        }
 public HandleQueueControl(MainForm mainForm, WriteToLogDelegate writeToLog, ServiceBusHelper serviceBusHelper, QueueDescription queueDescription, string path)
 {
     this.mainForm         = mainForm;
     this.writeToLog       = writeToLog;
     this.serviceBusHelper = serviceBusHelper;
     this.path             = path;
     this.queueDescription = queueDescription;
     InitializeComponent();
     InitializeData();
 }
        public static async Task<QueueDescription> CreateQueueSafeAsync(this NamespaceManager namespaceManager, QueueDescription queueDescription)
        {
            var create = true;
            try
            {
                queueDescription = await namespaceManager.GetQueueAsync(queueDescription.Path).ConfigureAwait(false);

                create = false;
            }
            catch (MessagingEntityNotFoundException)
            {
            }

            if (create)
            {
                var created = false;
                try
                {
                    if (_log.IsDebugEnabled)
                        _log.DebugFormat("Creating queue {0}", queueDescription.Path);

                    queueDescription = await namespaceManager.CreateQueueAsync(queueDescription).ConfigureAwait(false);

                    created = true;
                }
                catch (MessagingEntityAlreadyExistsException)
                {
                }
                catch (MessagingException mex)
                {
                    if (mex.Message.Contains("(409)"))
                    {
                    }
                    else
                        throw;
                }

                if (!created)
                    queueDescription = await namespaceManager.GetQueueAsync(queueDescription.Path).ConfigureAwait(false);
            }

            if (_log.IsDebugEnabled)
            {
                _log.DebugFormat("Queue: {0} ({1})", queueDescription.Path,
                    string.Join(", ", new[]
                    {
                        queueDescription.EnableExpress ? "express" : "",
                        queueDescription.RequiresDuplicateDetection ? "dupe detect" : "",
                        queueDescription.EnableDeadLetteringOnMessageExpiration ? "dead letter" : "",
                        queueDescription.RequiresSession ? "session" : ""
                    }.Where(x => !string.IsNullOrWhiteSpace(x))));
            }

            return queueDescription;
        }
Example #38
0
        public async Task ServiceBus_Node_DoesNotExhaustConnections()
        {
            var connectionString     = Environment.GetEnvironmentVariable("AzureWebJobsServiceBus");
            NamespaceManager manager = NamespaceManager.CreateFromConnectionString(connectionString);

            // Start with an empty queue
            await manager.DeleteQueueAsync("node");

            // Pre-create the queue as we can end up with 409s if a bunch of requests
            // try to create the queue at once
            await manager.CreateQueueAsync("node");

            int i = 0, j = 0, lastConnectionCount = 0, lastConnectionLimit = 0;

            using (var client = CreateClient())
            {
                // make this longer as we'll start seeing long timeouts from Service Bus upon failure.
                client.Timeout = TimeSpan.FromMinutes(5);

                // max connections in dynamic is currently 300
                for (i = 0; i < 25; i++)
                {
                    List <Task <HttpResponseMessage> > requestTasks = new List <Task <HttpResponseMessage> >();

                    for (j = 0; j < 25; j++)
                    {
                        requestTasks.Add(client.GetAsync($"api/ServiceBusNode?code={_fixture.FunctionDefaultKey}"));
                    }

                    await Task.WhenAll(requestTasks);

                    foreach (var requestTask in requestTasks)
                    {
                        HttpResponseMessage response = await requestTask;
                        JObject             result   = await response.Content.ReadAsAsync <JObject>();

                        if (response.IsSuccessStatusCode)
                        {
                            // store these off for error details
                            lastConnectionCount = (int)result["connections"];
                            lastConnectionLimit = (int)result["connectionLimit"];

                            // make sure we have the correct limit
                            Assert.Equal(300, lastConnectionLimit);
                        }

                        Assert.True(response.IsSuccessStatusCode, $"Error: {response.StatusCode}, Last successful response: Connections: {lastConnectionCount}, ConnectionLimit: {lastConnectionLimit}");
                    }
                }
            }

            QueueDescription queueDescription = manager.GetQueue("node");

            Assert.Equal(i * j, queueDescription.MessageCountDetails.ActiveMessageCount);
        }
Example #39
0
        public AzureServiceBusQueue(string connectionString, string queueName = null, int retries = 2, TimeSpan?workItemTimeout = null, bool shouldRecreate = false, RetryPolicy retryPolicy = null, ISerializer serializer = null, IEnumerable <IQueueBehavior <T> > behaviors = null, ILoggerFactory loggerFactory = null) : base(serializer, behaviors, loggerFactory)
        {
            _queueName        = queueName ?? typeof(T).Name;
            _namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
            _retries          = retries;
            if (workItemTimeout.HasValue && workItemTimeout.Value < TimeSpan.FromMinutes(5))
            {
                _workItemTimeout = workItemTimeout.Value;
            }

            if (_namespaceManager.QueueExists(_queueName) && shouldRecreate)
            {
                _namespaceManager.DeleteQueue(_queueName);
            }

            if (!_namespaceManager.QueueExists(_queueName))
            {
                _queueDescription = new QueueDescription(_queueName)
                {
                    MaxDeliveryCount = retries + 1,
                    LockDuration     = _workItemTimeout
                };
                _namespaceManager.CreateQueue(_queueDescription);
            }
            else
            {
                _queueDescription = _namespaceManager.GetQueue(_queueName);

                bool changes = false;

                int newMaxDeliveryCount = retries + 1;
                if (_queueDescription.MaxDeliveryCount != newMaxDeliveryCount)
                {
                    _queueDescription.MaxDeliveryCount = newMaxDeliveryCount;
                    changes = true;
                }

                if (_queueDescription.LockDuration != _workItemTimeout)
                {
                    _queueDescription.LockDuration = _workItemTimeout;
                    changes = true;
                }

                if (changes)
                {
                    _namespaceManager.UpdateQueue(_queueDescription);
                }
            }

            _queueClient = QueueClient.CreateFromConnectionString(connectionString, _queueDescription.Path);
            if (retryPolicy != null)
            {
                _queueClient.RetryPolicy = retryPolicy;
            }
        }
Example #40
0
        private static void RegenerateKey(QueueDescription description, string ruleName, TextWriter log)
        {
            SharedAccessAuthorizationRule rule;
            if (!description.Authorization.TryGetSharedAccessAuthorizationRule(ruleName, out rule))
                throw new Exception($"Authorization rule {ruleName} was not found");

            rule.SecondaryKey = rule.PrimaryKey;
            rule.PrimaryKey = SharedAccessAuthorizationRule.GenerateRandomKey();

            log.WriteLine($"Authorization rule: {ruleName}\nPrimary key: {rule.PrimaryKey}\nSecondary key: {rule.SecondaryKey}");
        }
Example #41
0
        /// <summary>
        /// Creates a new Queue using the managementClient with the name provided.
        /// </summary>
        private async Task CreateQueueAsync(string queueName)
        {
            // All the values have defaults and hence optional.
            // The only required parameter is the path of the queue (in this case, queueName)
            var queueDescription = new QueueDescription(queueName)
            {
                // The duration of a peek lock; that is, the amount of time that a message is locked from other receivers.
                LockDuration = TimeSpan.FromSeconds(45),

                // Size of the Queue. For non-partitioned entity, this would be the size of the queue.
                // For partitioned entity, this would be the size of each partition.
                MaxSizeInMB = 2048,

                // This value indicates if the queue requires guard against duplicate messages.
                // Find out more in DuplicateDetection sample
                RequiresDuplicateDetection = false,

                //Since RequiresDuplicateDetection is false, the following need not be specified and will be ignored.
                //DuplicateDetectionHistoryTimeWindow = TimeSpan.FromMinutes(2),

                // This indicates whether the queue supports the concept of session.
                // Find out more in "Session and Workflow Management Features" sample
                RequiresSession = false,

                // The default time to live value for the messages
                // Find out more in "TimeToLive" sample.
                DefaultMessageTimeToLive = TimeSpan.FromDays(7),

                // Duration of idle interval after which the queue is automatically deleted.
                AutoDeleteOnIdle = TimeSpan.MaxValue,

                // Decides whether an expired message due to TTL should be dead-letterd
                // Find out more in "TimeToLive" sample.
                EnableDeadLetteringOnMessageExpiration = false,

                // The maximum delivery count of a message before it is dead-lettered
                // Find out more in "DeadletterQueue" sample
                MaxDeliveryCount = 8,

                // Creating only one partition.
                // Find out more in PartitionedQueues sample.
                EnablePartitioning = false
            };

            try
            {
                QueueDescription createdQueue = await managementClient.CreateQueueAsync(queueName).ConfigureAwait(false);
            }
            catch (ServiceBusException ex)
            {
                Console.WriteLine($"Encountered exception while creating Queue -\n{ex}");
                throw;
            }
        }
        private async Task CreateQueueIfNotExists()
        {
            bool queueExists = await _namespaceManager.QueueExistsAsync(_queueName);

            if (queueExists == false)
            {
                var queueDescription = new QueueDescription(_queueName);
                queueDescription.EnablePartitioning = false;
                await _namespaceManager.CreateQueueAsync(queueDescription);
            }
        }
Example #43
0
        public void RenameQueue([FromBody] Rename names)
        {
            NamespaceManager namespaceManager = CreateNamespaceManager();
            QueueDescription description      = namespaceManager.GetQueue(names.oldName);

            if (description.EnablePartitioning)
            {
                throw new Exception("Partitioned queues cannot be renamed.");
            }
            namespaceManager.RenameQueue(names.oldName, names.newName);
        }
Example #44
0
        public static void PurgeQueue(Uri baseAddress, string queueName, TokenProvider credentials)
        {
            Debug.Assert(QueueExists(baseAddress, queueName, credentials));

            NamespaceManager namespaceClient = new NamespaceManager(baseAddress, credentials);
            QueueDescription description     = namespaceClient.GetQueue(queueName);

            DeleteQueue(baseAddress, queueName, credentials);

            CreateQueue(baseAddress, queueName, description, credentials);
        }
Example #45
0
        static void CreateQueue()
        {
            var ns = NamespaceManager.CreateFromConnectionString(connection);

            if (!ns.QueueExists(queue))
            {
                var qd = new QueueDescription(queue);
                qd.AutoDeleteOnIdle = new TimeSpan(1, 0, 0);
                ns.CreateQueue(qd);
            }
        }
        private static void CreateQueueIfDoesNotAlreadyExist(
            this ServiceBusSettings settings,
            QueueDescription queueDescription)
        {
            var namespaceManager = NamespaceManager.CreateFromConnectionString(settings.ConnectionString);

            if (!namespaceManager.QueueExists(queueDescription.Path))
            {
                namespaceManager.CreateQueue(queueDescription);
            }
        }
Example #47
0
        public ActionResult SignUp(string userName)
        {
            if (string.IsNullOrEmpty(userName))
            {
                ViewBag.ErrorMessage = "You have to enter a name in the sign up box, stupid.";
                return(View("Index"));
            }
            else
            {
                User user = new User(userName);

                if (Session["balance"] != null && userName == (string)Session["UserName"])
                {
                    user.Balance = (int)Session["balance"];
                }

                Session["UserName"] = userName;

                var nm = NamespaceManager.CreateFromConnectionString(connectionString);
                QueueDescription qd = new QueueDescription(qname);
                //Ställ in Max size på queue på  2GB
                qd.MaxSizeInMegabytes = 2048;
                //Max Time To Live är 5 minuter
                qd.DefaultMessageTimeToLive = new TimeSpan(0, 5, 0);

                if (!nm.QueueExists(qname))
                {
                    nm.CreateQueue(qd);
                }

                //Skicka till queue med hjälp av den connectionstring vi tidigare ställt in i configen
                QueueClient qc = QueueClient.CreateFromConnectionString(connectionString, qname);

                //Skapa msg med email properaty och skicka till QueueClient
                var bm = new BrokeredMessage();

                Session["balance"]        = user.Balance;
                bm.Properties["userName"] = user.UserName;
                bm.Properties["balance"]  = user.Balance;
                bm.Properties["action"]   = "create";
                qc.Send(bm);

                ViewBag.message = "Hello " + user.UserName + ".You have a balance of " + user.Balance + " USD";

                var frogData = new FrogData();
                var frogList = frogData.GetFrogList();

                Session["frogList"] = frogList;

                ViewBag.frogList = frogList;

                return(View("Betting", frogList));
            }
        }
Example #48
0
        private static void CreateQueueIfDoesNotAlreadyExist(
            this ServiceBusSettings settings,
            QueueDescription queueDescription)
        {
            var namespaceManager = NamespaceManager.CreateFromConnectionString(settings.ConnectionString);

            if (!namespaceManager.QueueExists(queueDescription.Path))
            {
                namespaceManager.CreateQueue(queueDescription);
            }
        }
Example #49
0
        AzureServiceBusEndpointAddress([NotNull] Data data,
                                       AddressType addressType)
        {
            if (data == null)
            {
                throw new ArgumentNullException("data");
            }

            _data = data;

            _tp = TokenProvider.CreateSharedSecretTokenProvider(_data.UsernameIssuer,
                                                                _data.PasswordSharedSecret);

            Uri sbUri = ServiceBusEnvironment.CreateServiceUri("sb", _data.Namespace, string.Empty);

            var mfs = new MessagingFactorySettings
            {
                TokenProvider = _tp,
                NetMessagingTransportSettings =
                {
                    // todo: configuration setting
                    BatchFlushInterval = 50.Milliseconds()
                },
                OperationTimeout = 3.Seconds()
            };

            _mff = () => MessagingFactory.Create(sbUri, mfs);

            _nm = new NamespaceManager(sbUri, _tp);

            string suffix = "";

            if (addressType == AddressType.Queue)
            {
                _queueDescription = new QueueDescriptionImpl(data.QueueOrTopicName);
            }
            else
            {
                _topicDescription = new TopicDescriptionImpl(data.QueueOrTopicName);
                suffix            = "?topic=true";
            }

            _rebuiltUri = new Uri(string.Format("azure-sb://{0}:{1}@{2}/{3}{4}",
                                                data.UsernameIssuer,
                                                Uri.EscapeDataString(data.PasswordSharedSecret),
                                                data.Namespace,
                                                data.QueueOrTopicName,
                                                suffix));

            _friendlyUri = new Uri(string.Format("azure-sb://{0}/{1}{2}",
                                                 data.Namespace,
                                                 data.QueueOrTopicName,
                                                 suffix));
        }
Example #50
0
        internal void EnsureQueueExists(string queuePath)
        {
            if (_knownQueues.Value.Contains(queuePath))
            {
                return;
            }

            lock (LockFor(queuePath))
            {
                if (_knownQueues.Value.Contains(queuePath))
                {
                    return;
                }

                _retry.Do(async() =>
                {
                    var queueDescription = new QueueDescription(queuePath)
                    {
                        MaxDeliveryCount         = _maxDeliveryAttempts,
                        DefaultMessageTimeToLive = _defaultMessageTimeToLive,
                        EnableDeadLetteringOnMessageExpiration = true,
                        EnableBatchedOperations    = true,
                        RequiresDuplicateDetection = false,
                        RequiresSession            = false,
                        //SupportOrdering = false,
                        AutoDeleteOnIdle = _autoDeleteOnIdle
                    };

                    // We don't check for queue existence here because that introduces a race condition with any other bus participant that's
                    // launching at the same time. If it doesn't exist, we'll create it. If it does, we'll just continue on with life and
                    // update its configuration in a minute anyway.  -andrewh 8/12/2013
                    try
                    {
                        await _managementClient().CreateQueueAsync(queueDescription);
                    }
                    catch (MessagingEntityAlreadyExistsException)
                    {
                        await _managementClient().UpdateQueueAsync(queueDescription);
                    }
                    // catch (MessagingException exc)
                    // {
                    //     if (!exc.Message.Contains("SubCode=40901")) throw;
                    //
                    //     // SubCode=40901. Another conflicting operation is in progress. Let's see if it's created the queue for us.
                    //     if (!_managementClient().QueueExists(queuePath))
                    //         throw new BusException($"Queue creation for '{queuePath}' failed due to a conflicting operation and that queue does not already exist.", exc)
                    //             .WithData("QueuePath", queuePath);
                    // }

                    _knownQueues.Value.Add(queuePath);
                },
                          "Creating queue " + queuePath);
            }
        }
Example #51
0
 private static async Task <QueueDescription> CreateQueueIfNotExists(QueueDescription queueDescription)
 {
     try
     {
         return(await _mgmtClient.GetQueueAsync(queueDescription.Path));
     }
     catch (MessagingEntityNotFoundException)
     {
         return(await _mgmtClient.CreateQueueAsync(queueDescription));
     }
 }
        static IEnumerable <string> GetQueryStringOptions(QueueDescription settings)
        {
            if (settings.EnableExpress)
            {
                yield return("express=true");
            }

            if (settings.AutoDeleteOnIdle > TimeSpan.Zero)
            {
                yield return($"autodelete={settings.AutoDeleteOnIdle.TotalSeconds}");
            }
        }
        public static void CreateQueue(string entityName)
        {
            NamespaceManager nsManager = NamespaceManager.CreateFromConnectionString(_sbAuth);

            QueueDescription queueDesc = new QueueDescription(entityName)
            {
                EnableDeadLetteringOnMessageExpiration = true,
                DefaultMessageTimeToLive = new TimeSpan(0, 0, 0, 15)
            };

            nsManager.CreateQueue(queueDesc);
        }
        public ReceiveEndpointSettings(string queuePath)
        {
            QueueDescription = new QueueDescription(queuePath);
            QueueDescription.EnableBatchedOperations = true;
            QueueDescription.MaxDeliveryCount = 5;
            QueueDescription.DefaultMessageTimeToLive = TimeSpan.FromDays(365);
            QueueDescription.LockDuration = TimeSpan.FromMinutes(5);
            QueueDescription.EnableDeadLetteringOnMessageExpiration = true;

            MaxConcurrentCalls = Math.Max(Environment.ProcessorCount, 8);
            PrefetchCount = Math.Max(MaxConcurrentCalls, 32);
        }
        public async Task CreateQueueAsync()
        {
            if (await QueueExists())
                return;

            QueueDescription queueDesc = new QueueDescription(_entityName)
            {
                EnableDeadLetteringOnMessageExpiration = true
            };

            await _nsMgr.CreateQueueAsync(queueDesc);
        }
		public MessageReceiverObservableExtensionsTests()
		{
            this.azureServiceBusTestUtilities = AzureServiceBusTestUtilities.Create();

			string queueName = "MessageReceiverExtensionTests-" + Guid.NewGuid();

			this.queueDescription = this.azureServiceBusTestUtilities.NamespaceManager.CreateQueue(queueName);

            MessagingFactory messagingFactory = this.azureServiceBusTestUtilities.MessagingFactory;

			this.messageSender = messagingFactory.CreateMessageSender(this.queueDescription.Path);
			this.messageReceiver = messagingFactory.CreateMessageReceiver(this.queueDescription.Path);
		}
		public QueueClientObservableExtensionsTests()
		{
            this.azureServiceBusTestUtilities = AzureServiceBusTestUtilities.Create();

			this.queueDescription = new QueueDescription("MessageReceiverExtensionTests-" + Guid.NewGuid())
			{
				RequiresSession = true,
			};

			this.queueDescription = this.azureServiceBusTestUtilities.NamespaceManager.CreateQueue(this.queueDescription);

			this.queueClient = this.azureServiceBusTestUtilities.MessagingFactory.CreateQueueClient(this.queueDescription.Path);
		}
Example #58
0
 public static SubscriptionDescription CreateSubscriptionDescription(string topicPath, string subscriptionName, QueueDescription queue, string queuePath)
 {
     return new SubscriptionDescription(topicPath, subscriptionName)
     {
         AutoDeleteOnIdle = queue.AutoDeleteOnIdle,
         DefaultMessageTimeToLive = queue.DefaultMessageTimeToLive,
         EnableBatchedOperations = queue.EnableBatchedOperations,
         EnableDeadLetteringOnMessageExpiration = queue.EnableDeadLetteringOnMessageExpiration,
         ForwardTo = queuePath,
         LockDuration = queue.LockDuration,
         MaxDeliveryCount = queue.MaxDeliveryCount,
         UserMetadata = queue.UserMetadata
     };
 }
Example #59
0
        public void Initialize(string queueName)
        {
            var namespaceManager = NamespaceManager.CreateFromConnectionString(this._connectionString);
            //check if queue name exists
            if (!namespaceManager.QueueExists(queueName))
            {
                QueueDescription queue = new QueueDescription(queueName);
                //queue.MaxSizeInMegabytes = 5120; //5GB
                //expiry to 30 days
                //queue.DefaultMessageTimeToLive = new System.TimeSpan(720, 0, 0);

                namespaceManager.CreateQueue(queue);
            }
        }
 /// <summary>
 ///     Creates a queue client, as well as the target queue if it does not already exist.
 /// </summary>
 public static QueueClient CreateQueueClient(
     this ServiceBusSettings settings,
     string queueName,
     Action<QueueDescription> configure = null)
 {
     queueName = queueName.PrefixedIfConfigured(settings);
     var queueDescription = new QueueDescription(queueName);
     if (configure != null)
     {
         configure(queueDescription);
     }
     settings.CreateQueueIfDoesNotAlreadyExist(queueDescription);
     return QueueClient.CreateFromConnectionString(settings.ConnectionString, queueName);
 }