public async Task GetUpdateDeleteQueue()
        {
            string queueName        = Guid.NewGuid().ToString("D").Substring(0, 8);
            string connectionString = TestEnvironment.ServiceBusConnectionString;
            var    client           = new ServiceBusAdministrationClient(connectionString);
            var    qd = new CreateQueueOptions(queueName);
            await client.CreateQueueAsync(qd);

            #region Snippet:GetQueue
            QueueProperties queue = await client.GetQueueAsync(queueName);

            #endregion
            #region Snippet:UpdateQueue
            queue.LockDuration = TimeSpan.FromSeconds(60);
            QueueProperties updatedQueue = await client.UpdateQueueAsync(queue);

            #endregion
            Assert.AreEqual(TimeSpan.FromSeconds(60), updatedQueue.LockDuration);
            #region Snippet:DeleteQueue
            await client.DeleteQueueAsync(queueName);

            #endregion
            Assert.That(
                async() =>
                await client.GetQueueAsync(queueName),
                Throws.InstanceOf <ServiceBusException>().And.Property(nameof(ServiceBusException.Reason)).EqualTo(ServiceBusFailureReason.MessagingEntityNotFound));
        }
        private async Task CreateQueueIfNotExistsAsync(string name, CancellationToken cancellationToken)
        {
            // if entity creation is not enabled, just return
            if (!TransportOptions.EnableEntityCreation)
            {
                Logger.LogTrace("Entity creation is diabled. Queue creation skipped");
                return;
            }

            // If the queue does not exist, create it
            Logger.LogDebug("Checking if queue '{QueueName}' exists", name);
            if (!await managementClient.QueueExistsAsync(name: name, cancellationToken: cancellationToken))
            {
                Logger.LogTrace("Queue '{QueueName}' does not exist, preparing creation.", name);
                var options = new CreateQueueOptions(name: name)
                {
                    // set the defaults for a queue here
                    Status           = EntityStatus.Active,
                    MaxDeliveryCount = 10,
                };

                // Allow for the defaults to be overriden
                TransportOptions.SetupQueueOptions?.Invoke(options);
                Logger.LogInformation("Creating queue '{QueueName}'", name);
                _ = await managementClient.CreateQueueAsync(options : options, cancellationToken : cancellationToken);
            }
        }
Beispiel #3
0
        private static async Task ReceiveTextMessage()
        {
            const string queueName = "sbq-text-message";

            var managementClient = new ServiceBusAdministrationClient(Config.Namespace, Config.Credential);

            if (!await managementClient.QueueExistsAsync(queueName))
            {
                await managementClient.CreateQueueAsync(queueName);
            }

            Console.WriteLine($"Receiving messages for {nameof(ReceiveTextMessage)}...");

            await using var client = new ServiceBusClient(Config.Namespace, Config.Credential);

            // get the options to use for configuring the processor
            var options = new ServiceBusProcessorOptions
            {
                // By default after the message handler returns, the processor will complete the message
                // If we want more fine-grained control over settlement, we can set this to false.
                AutoCompleteMessages = false,

                // I can also allow for multi-threading
                MaxConcurrentCalls = 2
            };

            // create a processor that we can use to process the messages
            var processor = client.CreateProcessor(queueName, options);

            processor.ProcessMessageAsync += MessageHandler;
            processor.ProcessErrorAsync   += ErrorHandler;
Beispiel #4
0
        public static async Task <QueueScope> CreateWithQueue(ServiceBusAdministrationClient adminClient)
        {
            var queueName = Guid.NewGuid().ToString("D");
            var response  = await adminClient.CreateQueueAsync(queueName).ConfigureAwait(false);

            return(new QueueScope(adminClient, queueName, response.Value));
        }
        public static async Task Stage(string connectionString, string inputQueue, string destinationQueue)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.QueueExistsAsync(inputQueue))
            {
                await client.DeleteQueueAsync(inputQueue);
            }
            await client.CreateQueueAsync(new CreateQueueOptions(inputQueue) { MaxDeliveryCount = 1 });

            if (await client.QueueExistsAsync(destinationQueue))
            {
                await client.DeleteQueueAsync(destinationQueue);
            }
            await client.CreateQueueAsync(destinationQueue);
        }
        private static async Task <ServiceBusAdministrationClient> Cleanup(string connectionString, string inputQueue,
                                                                           string topicName, string rushSubscription, string currencySubscription)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.SubscriptionExistsAsync(topicName, rushSubscription))
            {
                await client.DeleteSubscriptionAsync(topicName, rushSubscription);
            }

            if (await client.SubscriptionExistsAsync(topicName, currencySubscription))
            {
                await client.DeleteSubscriptionAsync(topicName, currencySubscription);
            }

            if (await client.TopicExistsAsync(topicName))
            {
                await client.DeleteTopicAsync(topicName);
            }

            var topicDescription = new CreateTopicOptions(topicName);
            await client.CreateTopicAsync(topicDescription);

            if (await client.QueueExistsAsync(inputQueue))
            {
                await client.DeleteQueueAsync(inputQueue);
            }

            var queueDescription = new CreateQueueOptions(inputQueue);
            await client.CreateQueueAsync(queueDescription);

            return(client);
        }
Beispiel #7
0
        private static async Task SendTextMessage()
        {
            const string queueName = "sbq-text-message";

            var managementClient = new ServiceBusAdministrationClient(Config.Namespace, Config.Credential);

            if (!await managementClient.QueueExistsAsync(queueName))
            {
                await managementClient.CreateQueueAsync(queueName);
            }

            await using var client = new ServiceBusClient(Config.Namespace, Config.Credential);

            var sender = client.CreateSender(queueName);

            var message = new ServiceBusMessage(Encoding.UTF8.GetBytes("This is a simple test message"));

            Console.WriteLine("Press any key to send a message. Press Enter to exit.");

            while (Console.ReadKey(true).Key != ConsoleKey.Enter)
            {
                await sender.SendMessageAsync(message);

                Console.WriteLine($"Message Sent for {nameof(SendTextMessage)}");
            }

            Console.ReadLine();

            await managementClient.DeleteQueueAsync(queueName);
        }
Beispiel #8
0
        public static async Task <QueueProperties> CreateQueueAsync(string connectionString, string queueName, bool requiresSession = false)
        {
            var client  = new ServiceBusAdministrationClient(connectionString);
            var options = new CreateQueueOptions(queueName)
            {
                DefaultMessageTimeToLive            = TimeSpan.FromDays(2),
                DuplicateDetectionHistoryTimeWindow = TimeSpan.FromMinutes(1),
                EnableBatchedOperations             = true,
                DeadLetteringOnMessageExpiration    = true,
                EnablePartitioning            = false,
                ForwardDeadLetteredMessagesTo = null,
                ForwardTo          = null,
                LockDuration       = TimeSpan.FromSeconds(45),
                MaxDeliveryCount   = 8,
                MaxSizeInMegabytes = 2048,
                UserMetadata       = "some metadata"
            };

            options.RequiresSession = requiresSession;

            options.AuthorizationRules.Add(new SharedAccessAuthorizationRule(
                                               "allClaims",
                                               new[] { AccessRights.Manage, AccessRights.Send, AccessRights.Listen }));

            return(await client.CreateQueueAsync(options));
        }
Beispiel #9
0
        private static async Task SendRequestMessageWithResponse()
        {
            const string requestQueue  = "sbq-request-queue";
            const string responseQueue = "sbq-response-queue";

            var managementClient = new ServiceBusAdministrationClient(Config.Namespace, Config.Credential);

            if (!await managementClient.QueueExistsAsync(requestQueue))
            {
                await managementClient.CreateQueueAsync(requestQueue);
            }

            if (!await managementClient.QueueExistsAsync(responseQueue))
            {
                var createQueueOptions = new CreateQueueOptions(responseQueue)
                {
                    RequiresSession = true
                };

                await managementClient.CreateQueueAsync(createQueueOptions);
            }

            var responseSessionId = Guid.NewGuid().ToString();

            await using var requestClient = new ServiceBusClient(Config.Namespace, Config.Credential);

            var sender = requestClient.CreateSender(requestQueue);

            var message = new ServiceBusMessage(Encoding.UTF8.GetBytes("This is a simple test message"))
            {
                ReplyToSessionId = responseSessionId
            };

            Console.WriteLine("Press any key to send a message. Press Enter to exit.");

            await using var responseClient = new ServiceBusClient(Config.Namespace, Config.Credential);

            var serviceBusSessionProcessorOptions = new ServiceBusSessionProcessorOptions();

            serviceBusSessionProcessorOptions.SessionIds.Add(responseSessionId);

            var sessionProcessor = responseClient.CreateSessionProcessor(responseQueue, serviceBusSessionProcessorOptions);

            sessionProcessor.ProcessMessageAsync += MessageHandler;
            sessionProcessor.ProcessErrorAsync   += ErrorHandler;
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            _cancellationToken = cancellationToken;
            _client            = await _clientFactory.GetReceiverClient <T>(new ServiceBusProcessorOptions
            {
                AutoCompleteMessages       = false,
                MaxAutoLockRenewalDuration = Settings.MessageLockTimeout,
                MaxConcurrentCalls         = Settings.MaxConcurrentCalls,
                PrefetchCount = Settings.PrefetchCount,
                ReceiveMode   = ServiceBusReceiveMode.PeekLock
            }).ConfigureAwait(false);

            var queueName = AutoMessageMapper.GetQueueName <T>();

            if (!await _managementClient.QueueExistsAsync(queueName, _cancellationToken).ConfigureAwait(false))
            {
                try
                {
                    var serviceBusCreationOptions = GetServiceBusCreationOptions();

                    await _managementClient.CreateQueueAsync(new CreateQueueOptions(queueName)
                    {
                        EnablePartitioning      = serviceBusCreationOptions.EnablePartitioning,
                        EnableBatchedOperations = serviceBusCreationOptions.EnableBatchedOperations
                    }, cancellationToken).ConfigureAwait(false);
                }
                catch (ServiceBusException e)
                {
                    _log.Error(e, "Failed to create queue {QueueName}", queueName);
                    throw;
                }
            }
            _deadLetterLimit = Settings.DeadLetterDeliveryLimit;

            _client.ProcessMessageAsync += ClientOnProcessMessageAsync;
            _client.ProcessErrorAsync   += ClientOnProcessErrorAsync;

            await _client.StartProcessingAsync(cancellationToken);

#pragma warning disable 4014
            // ReSharper disable once MethodSupportsCancellation
            Task.Run(async() =>
            {
                _cancellationToken.WaitHandle.WaitOne();
                //Cancellation requested
                try
                {
                    _log.Information($"Closing ServiceBus channel receiver for {typeof(T).Name}");
                    await _client.CloseAsync(CancellationToken.None);
                }
                catch (Exception)
                {
                    //Swallow
                }
            });
#pragma warning restore 4014
        }
Beispiel #11
0
        private void CreateServiceBusQueue(string serviceBusQueueName)
        {
            var busAdmin = new ServiceBusAdministrationClient(Connections.ServiceBusConnectionString);

            if (!busAdmin.QueueExistsAsync(serviceBusQueueName).Result.Value)
            {
                busAdmin.CreateQueueAsync(serviceBusQueueName).Wait();
            }
        }
        private async Task EnsureQueueExistsAsync(string queueName, CancellationToken cancellationToken)
        {
            if (await _administrationClient.QueueExistsAsync(queueName, cancellationToken))
            {
                return;
            }

            await _administrationClient.CreateQueueAsync(queueName, cancellationToken);
        }
Beispiel #13
0
        public static async Task <IAsyncDisposable> Stage(string connectionString, string destination)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (!await client.QueueExistsAsync(destination))
            {
                await client.CreateQueueAsync(destination);
            }
            return(new Leave(connectionString, destination));
        }
Beispiel #14
0
        public static async Task Stage(string connectionString, string destination)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.QueueExistsAsync(destination))
            {
                await client.DeleteQueueAsync(destination);
            }
            await client.CreateQueueAsync(destination);
        }
Beispiel #15
0
        public static Task Create(ServiceBusAdministrationClient client, CommandArgument name, CommandOption <int> size, CommandOption partitioning)
        {
            var queueDescription = new CreateQueueOptions(name.Value)
            {
                EnableBatchedOperations = true,
                LockDuration            = TimeSpan.FromMinutes(5),
                MaxDeliveryCount        = int.MaxValue,
                MaxSizeInMegabytes      = (size.HasValue() ? size.ParsedValue : 5) * 1024,
                EnablePartitioning      = partitioning.HasValue()
            };

            return(client.CreateQueueAsync(queueDescription));
        }
Beispiel #16
0
        public async Task CreateQueue()
        {
            string adminQueueName        = Guid.NewGuid().ToString("D").Substring(0, 8);
            string adminConnectionString = TestEnvironment.ServiceBusConnectionString;

            try
            {
                #region Snippet:CreateQueue
#if SNIPPET
                string connectionString = "<connection_string>";
                string queueName        = "<queue_name>";
#else
                string queueName        = adminQueueName;
                string connectionString = adminConnectionString;
#endif
                var client  = new ServiceBusAdministrationClient(connectionString);
                var options = new CreateQueueOptions(queueName)
                {
                    AutoDeleteOnIdle                    = TimeSpan.FromDays(7),
                    DefaultMessageTimeToLive            = TimeSpan.FromDays(2),
                    DuplicateDetectionHistoryTimeWindow = TimeSpan.FromMinutes(1),
                    EnableBatchedOperations             = true,
                    DeadLetteringOnMessageExpiration    = true,
                    EnablePartitioning                  = false,
                    ForwardDeadLetteredMessagesTo       = null,
                    ForwardTo                  = null,
                    LockDuration               = TimeSpan.FromSeconds(45),
                    MaxDeliveryCount           = 8,
                    MaxSizeInMegabytes         = 2048,
                    RequiresDuplicateDetection = true,
                    RequiresSession            = true,
                    UserMetadata               = "some metadata"
                };

                options.AuthorizationRules.Add(new SharedAccessAuthorizationRule(
                                                   "allClaims",
                                                   new[] { AccessRights.Manage, AccessRights.Send, AccessRights.Listen }));

                QueueProperties createdQueue = await client.CreateQueueAsync(options);

                #endregion
                Assert.AreEqual(options, new CreateQueueOptions(createdQueue)
                {
                    MaxMessageSizeInKilobytes = options.MaxMessageSizeInKilobytes
                });
            }
            finally
            {
                await new ServiceBusAdministrationClient(adminConnectionString).DeleteQueueAsync(adminQueueName);
            }
        }
        public ServiceBusQueue(string connectionString, string queueName, ServiceBusReceiveMode receiveMode = ServiceBusReceiveMode.PeekLock, bool createQueueIfItDoesNotExist = true)
            : base(connectionString)
        {
            this.connectionString = connectionString;
            this.queueName        = queueName;
            this.receiveMode      = receiveMode;
            this.SubQueue         = SubQueue.None;
            busAdmin = new ServiceBusAdministrationClient(this.connectionString);

            if (createQueueIfItDoesNotExist && !busAdmin.QueueExistsAsync(queueName).Result.Value)
            {
                busAdmin.CreateQueueAsync(queueName).Wait();
            }
        }
        public async Task CreateQueues(string[] queues, CancellationToken cancellationToken = default)
        {
            await namespacePermissions.CanManage(cancellationToken).ConfigureAwait(false);

            var topic = new CreateTopicOptions(transportSettings.TopicName)
            {
                EnableBatchedOperations = true,
                EnablePartitioning      = transportSettings.EnablePartitioning,
                MaxSizeInMegabytes      = maxSizeInMb
            };

            try
            {
                await administrativeClient.CreateTopicAsync(topic, cancellationToken).ConfigureAwait(false);
            }
            catch (ServiceBusException sbe) when(sbe.Reason == ServiceBusFailureReason.MessagingEntityAlreadyExists)
            {
                Logger.Info($"Topic {topic.Name} already exists");
            }
            catch (ServiceBusException sbe) when(sbe.IsTransient) // An operation is in progress.
            {
                Logger.Info($"Topic creation for {topic.Name} is already in progress");
            }

            foreach (var address in queues)
            {
                var queue = new CreateQueueOptions(address)
                {
                    EnableBatchedOperations = true,
                    LockDuration            = TimeSpan.FromMinutes(5),
                    MaxDeliveryCount        = int.MaxValue,
                    MaxSizeInMegabytes      = maxSizeInMb,
                    EnablePartitioning      = transportSettings.EnablePartitioning
                };

                try
                {
                    await administrativeClient.CreateQueueAsync(queue, cancellationToken).ConfigureAwait(false);
                }
                catch (ServiceBusException sbe) when(sbe.Reason == ServiceBusFailureReason.MessagingEntityAlreadyExists)
                {
                    Logger.Debug($"Queue {queue.Name} already exists");
                }
                catch (ServiceBusException sbe) when(sbe.IsTransient) // An operation is in progress.
                {
                    Logger.Info($"Queue creation for {queue.Name} is already in progress");
                }
            }
        }
Beispiel #19
0
        private static async Task <int> Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.Error.WriteLine("An Azure Service Bus connection string must be passed as the first argument");
                return(1);
            }

            Agent.Subscribe(new AzureMessagingServiceBusDiagnosticsSubscriber());

            var connectionString = args[0];
            var adminClient      = new ServiceBusAdministrationClient(connectionString);
            var client           = new ServiceBusClient(connectionString);

            var queueName = Guid.NewGuid().ToString("D");

            Console.WriteLine($"Creating queue {queueName}");

            var response = await adminClient.CreateQueueAsync(queueName).ConfigureAwait(false);

            var sender = client.CreateSender(queueName);

            Console.WriteLine("Sending messages to queue");

            await Agent.Tracer.CaptureTransaction("Send AzureServiceBus Messages", "messaging", async() =>
            {
                for (var i = 0; i < 10; i++)
                {
                    await sender.SendMessageAsync(new ServiceBusMessage($"test message {i}")).ConfigureAwait(false);
                }
            });

            var receiver = client.CreateReceiver(queueName);

            Console.WriteLine("Receiving messages from queue");

            var messages = await receiver.ReceiveMessagesAsync(9)
                           .ConfigureAwait(false);

            Console.WriteLine("Receiving message from queue");

            var message = await receiver.ReceiveMessageAsync()
                          .ConfigureAwait(false);

            Console.WriteLine("Press any key to continue...");
            Console.ReadKey();

            return(0);
        }
        public async Task RunBeforeAllTests()
        {
            var connectionString = Environment.GetEnvironmentVariable(ServiceBusTriggeredEndpointConfiguration.DefaultServiceBusConnectionName);

            Assert.IsNotNull(connectionString, $"Environment variable '{ServiceBusTriggeredEndpointConfiguration.DefaultServiceBusConnectionName}' should be defined to run tests.");

            var client = new ServiceBusAdministrationClient(connectionString);

            const string errorQueueName = "error";

            if (!await client.QueueExistsAsync(errorQueueName))
            {
                await client.CreateQueueAsync(errorQueueName);
            }
        }
Beispiel #21
0
        public async Task EnsureQueue(string queueName, CancellationToken cancellationToken = default)
        {
            if (!await _administrationClient.QueueExistsAsync(queueName, cancellationToken))
            {
                var options = new CreateQueueOptions(queueName)
                {
                    Status                   = EntityStatus.Active,
                    MaxSizeInMegabytes       = 1024,
                    DefaultMessageTimeToLive = TimeSpan.FromDays(10000),
                    RequiresSession          = queueName.Contains("response", StringComparison.OrdinalIgnoreCase)
                };

                await _administrationClient.CreateQueueAsync(options, cancellationToken);
            }
        }
        public static async Task Stage(string connectionString, string destination)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.QueueExistsAsync(destination))
            {
                await client.DeleteQueueAsync(destination);
            }

            var queueDescription = new CreateQueueOptions(destination)
            {
                RequiresSession = true
            };
            await client.CreateQueueAsync(queueDescription);
        }
        public static async Task Stage(string connectionString, string destination)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.QueueExistsAsync(destination))
            {
                await client.DeleteQueueAsync(destination);
            }

            var description = new CreateQueueOptions(destination)
            {
                MaxDeliveryCount = int.MaxValue
            };
            await client.CreateQueueAsync(description);
        }
Beispiel #24
0
        public static async Task Stage(string connectionString, string destination)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.QueueExistsAsync(destination))
            {
                await client.DeleteQueueAsync(destination);
            }

            var queueDescription = new CreateQueueOptions(destination)
            {
                RequiresDuplicateDetection          = true,
                DuplicateDetectionHistoryTimeWindow = TimeSpan.FromSeconds(20)
            };
            await client.CreateQueueAsync(queueDescription);
        }
Beispiel #25
0
        public static async Task Stage(string connectionString, string destination)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            if (await client.QueueExistsAsync(destination))
            {
                await client.DeleteQueueAsync(destination);
            }

            var description = new CreateQueueOptions(destination)
            {
                DeadLetteringOnMessageExpiration = true, // default false
                MaxDeliveryCount = 1
            };
            await client.CreateQueueAsync(description);
        }
Beispiel #26
0
        public static async Task Stage(string connectionString)
        {
            var client = new ServiceBusAdministrationClient(connectionString);

            async Task DeleteIfExists(string queueName)
            {
                if (await client.QueueExistsAsync(queueName))
                {
                    await client.DeleteQueueAsync(queueName);
                }
            }

            await Task.WhenAll(
                DeleteIfExists("Hop4"),
                DeleteIfExists("Hop3"),
                DeleteIfExists("Hop2"),
                DeleteIfExists("Hop1"),
                DeleteIfExists("Hop0"),
                DeleteIfExists("Hop")
                );

            var description = new CreateQueueOptions("Hop");
            await client.CreateQueueAsync(description);

            description = new CreateQueueOptions("Hop0");
            await client.CreateQueueAsync(description);

            description = new CreateQueueOptions("Hop1")
            {
                ForwardTo = "Hop0"
            };
            await client.CreateQueueAsync(description);

            description = new CreateQueueOptions("Hop2")
            {
                ForwardTo = "Hop1"
            };
            await client.CreateQueueAsync(description);

            description = new CreateQueueOptions("Hop3")
            {
                ForwardTo = "Hop2"
            };
            await client.CreateQueueAsync(description);

            description = new CreateQueueOptions("Hop4")
            {
                ForwardTo = "Hop3"
            };
            await client.CreateQueueAsync(description);
        }
Beispiel #27
0
        private static async Task SendTextMessageWithProperties()
        {
            const string queueName = "sbq-text-message-with-properties";

            var managementClient = new ServiceBusAdministrationClient(Config.Namespace, Config.Credential);

            if (!await managementClient.QueueExistsAsync(queueName))
            {
                await managementClient.CreateQueueAsync(queueName);
            }

            await using var client = new ServiceBusClient(Config.Namespace, Config.Credential);

            var sender = client.CreateSender(queueName);

            var message = new ServiceBusMessage
            {
                Body                  = new BinaryData("This is a simple test message"),
                ContentType           = "text/plain",
                CorrelationId         = Guid.NewGuid().ToString(),
                MessageId             = Guid.NewGuid().ToString(),
                TimeToLive            = TimeSpan.FromMinutes(10),
                ScheduledEnqueueTime  = DateTime.UtcNow,
                ApplicationProperties = { { "custom-property", "Custom Value" } }
            };

            Console.WriteLine("Press any key to send a message. Press Enter to exit.");

            while (Console.ReadKey(true).Key != ConsoleKey.Enter)
            {
                await sender.SendMessageAsync(message);

                Console.WriteLine($"Message Sent for {nameof(SendTextMessageWithProperties)}");
            }

            Console.ReadLine();

            await managementClient.DeleteQueueAsync(queueName);
        }
Beispiel #28
0
        private static async Task SendComplexObjectMessage()
        {
            const string queueName = "sbq-complex-object-message";

            var managementClient = new ServiceBusAdministrationClient(Config.Namespace, Config.Credential);

            if (!await managementClient.QueueExistsAsync(queueName))
            {
                await managementClient.CreateQueueAsync(queueName);
            }

            await using var client = new ServiceBusClient(Config.Namespace, Config.Credential);

            var sender = client.CreateSender(queueName);

            var payment = new Payment
            {
                PaymentId     = Guid.NewGuid(),
                AccountNumber = "132456789",
                Amount        = 1337m,
                PaymentDate   = DateTime.Today.AddDays(1),
                Payee         = "Mr John Smith"
            };

            var message = new ServiceBusMessage(JsonSerializer.SerializeToUtf8Bytes(payment));

            Console.WriteLine("Press any key to send a message. Press Enter to exit.");

            while (Console.ReadKey(true).Key != ConsoleKey.Enter)
            {
                await sender.SendMessageAsync(message);

                Console.WriteLine($"Message Sent for {nameof(SendComplexObjectMessage)}");
            }

            Console.ReadLine();

            await managementClient.DeleteQueueAsync(queueName);
        }
        public static async Task CreateQueueFromOptionsAsync(ServiceBusOptions options, string queueName)
        {
            var adminClient = new ServiceBusAdministrationClient(options.ConnectionString);

            try
            {
                await adminClient.CreateQueueAsync(new CreateQueueOptions(queueName)
                {
                    EnablePartitioning       = true,
                    RequiresSession          = false,
                    EnableBatchedOperations  = true,
                    AutoDeleteOnIdle         = options.QueueTtl,
                    DefaultMessageTimeToLive = options.MessageTtl,
                    MaxSizeInMegabytes       = options.MaxQueueSizeMegabytes
                });
            }
            catch (ServiceBusException exception)
                when(exception.Reason == ServiceBusFailureReason.MessagingEntityAlreadyExists)
                {
                    // Ignore
                }
        }
Beispiel #30
0
        public async Task <T> Request <T>(string queueName, object payload) where T : class
        {
            var temporaryQueueName = Guid.NewGuid().ToString();

            var timeoutMillis            = Math.Max(MinimumAutoDeleteOnIdleMillis, 2 * _options.RequestTimeOutMillis);
            var autoDeleteOnIdleTimespan = TimeSpan.FromMilliseconds(timeoutMillis);

            var createQueueOptions = new CreateQueueOptions(temporaryQueueName)
            {
                AutoDeleteOnIdle = autoDeleteOnIdleTimespan,
                Name             = temporaryQueueName
            };

            await _administrationClient.CreateQueueAsync(createQueueOptions);

            var sender   = _clientFactory.CreateSendClient(queueName);
            var receiver = _clientFactory.CreateReceiverClient(temporaryQueueName);

            try
            {
                var outboundMessage = new ServiceBusMessage(JsonSerializer.SerializeToUtf8Bytes(payload, Constants.DefaultJsonSerializerOptions))
                {
                    ReplyTo = temporaryQueueName
                };
                await sender.SendMessageAsync(outboundMessage);

                var reply = await receiver.ReceiveMessageAsync(_options.RequestTimeout);

                return(reply != null
                    ? JsonSerializer.Deserialize <T>(reply.Body, Constants.DefaultJsonSerializerOptions)
                    : null);
            }
            finally
            {
                await _administrationClient.DeleteQueueAsync(temporaryQueueName)
                .ConfigureAwait(false);
            }
        }