Exemple #1
0
        public void ClientProperties()
        {
            var account = Encoding.Default.GetString(GetRandomBuffer(12));
            var fullyQualifiedNamespace = new UriBuilder($"{account}.servicebus.windows.net/").Host;
            var connString = $"Endpoint=sb://{fullyQualifiedNamespace};SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey={Encoding.Default.GetString(GetRandomBuffer(64))}";
            var queueName  = Encoding.Default.GetString(GetRandomBuffer(12));
            var options    = new ServiceBusReceiverOptions()
            {
                ReceiveMode = ReceiveMode.ReceiveAndDelete
            };
            var receiver = new ServiceBusClient(connString).CreateReceiver(queueName, options);

            Assert.AreEqual(queueName, receiver.EntityPath);
            Assert.AreEqual(fullyQualifiedNamespace, receiver.FullyQualifiedNamespace);
            Assert.IsNotNull(receiver.Identifier);
            Assert.IsFalse(receiver.IsSessionReceiver);
            Assert.AreEqual(ReceiveMode.ReceiveAndDelete, receiver.ReceiveMode);
        }
Exemple #2
0
        public async Task ReceiveMessagesInReceiveAndDeleteMode()
        {
            await using (var scope = await ServiceBusScope.CreateWithQueue(enablePartitioning: false, enableSession: true))
            {
                await using var client = new ServiceBusClient(TestEnvironment.ServiceBusConnectionString);
                ServiceBusSender sender = client.CreateSender(scope.QueueName);

                var messageCount = 10;
                var sessionId    = "sessionId1";
                using ServiceBusMessageBatch batch = await sender.CreateBatchAsync();

                IEnumerable <ServiceBusMessage> messages = AddMessages(batch, messageCount, sessionId).AsEnumerable <ServiceBusMessage>();

                await sender.SendAsync(batch);

                var clientOptions = new ServiceBusReceiverOptions()
                {
                    ReceiveMode = ReceiveMode.ReceiveAndDelete
                };

                ServiceBusReceiver receiver = await client.CreateSessionReceiverAsync(
                    scope.QueueName,
                    clientOptions,
                    sessionId);

                var remainingMessages = messageCount;
                var messageEnum       = messages.GetEnumerator();

                while (remainingMessages > 0)
                {
                    foreach (var item in await receiver.ReceiveBatchAsync(remainingMessages))
                    {
                        messageEnum.MoveNext();
                        Assert.AreEqual(messageEnum.Current.MessageId, item.MessageId);
                        Assert.AreEqual(messageEnum.Current.SessionId, item.SessionId);
                        remainingMessages--;
                    }
                }
                Assert.AreEqual(0, remainingMessages);

                var peekedMessage = receiver.PeekAsync();
                Assert.IsNull(peekedMessage.Result);
            }
        }
Exemple #3
0
        public static async Task Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                          .SetBasePath(Directory.GetCurrentDirectory())
                          .AddJsonFile("appSettings.json", optional: true, reloadOnChange: true)
                          .AddEnvironmentVariables();

            IConfigurationRoot Configuration = builder.Build();

            var publisherConnectionString = Configuration.GetConnectionString("SubscriberConnectionString");

            var topicName = Configuration["TopicName"];

            Console.WriteLine(topicName);


            var serviceBusPubClient = new ServiceBusClient(publisherConnectionString);

            var serviceBusReceiverOptions = new ServiceBusReceiverOptions()
            {
                ReceiveMode = ServiceBusReceiveMode.ReceiveAndDelete
            };
            var subNameA = "sub-a";
            var subNameB = "sub-b";
            ServiceBusReceiver serviceBusReceiverSubA = serviceBusPubClient.CreateReceiver(topicName, subNameA, serviceBusReceiverOptions);
            ServiceBusReceiver serviceBusReceiverSubB = serviceBusPubClient.CreateReceiver(topicName, subNameB, serviceBusReceiverOptions);

            IList <Task> receivers = new List <Task>();

            receivers.Add(ReceivedMessagesAsync(serviceBusReceiverSubA, subNameA));
            receivers.Add(ReceivedMessagesAsync(serviceBusReceiverSubB, subNameB));

            await Task.WhenAll(receivers);

            await serviceBusReceiverSubA.CloseAsync();

            await serviceBusReceiverSubB.CloseAsync();

            Console.WriteLine("All messages received");
            Console.ReadLine();
        }
Exemple #4
0
        public async Task ReceiveSingleMessageInReceiveAndDeleteMode()
        {
            await using (var scope = await ServiceBusScope.CreateWithQueue(enablePartitioning: false, enableSession: false))
            {
                await using var client = new ServiceBusClient(TestEnvironment.ServiceBusConnectionString);
                ServiceBusSender  sender      = client.GetSender(scope.QueueName);
                ServiceBusMessage sentMessage = GetMessage();
                await sender.SendAsync(sentMessage);

                var clientOptions = new ServiceBusReceiverOptions()
                {
                    ReceiveMode = ReceiveMode.ReceiveAndDelete,
                };
                var receiver        = client.GetReceiver(scope.QueueName, clientOptions);
                var receivedMessage = await receiver.ReceiveAsync();

                Assert.AreEqual(sentMessage.MessageId, receivedMessage.MessageId);

                var message = receiver.PeekAsync();
                Assert.IsNull(message.Result);
            }
        }
Exemple #5
0
        public async Task LockSameSessionShouldThrow()
        {
            await using (var scope = await ServiceBusScope.CreateWithQueue(enablePartitioning: false, enableSession: true))
            {
                await using var client = new ServiceBusClient(TestEnvironment.ServiceBusConnectionString);
                ServiceBusSender sender = client.GetSender(scope.QueueName);

                int messageCt = 10;
                var sessionId = Guid.NewGuid().ToString();
                // send the messages
                using ServiceBusMessageBatch batch = await sender.CreateBatchAsync();

                ServiceBusMessageBatch messageBatch = AddMessages(batch, messageCt, sessionId);

                await sender.SendBatchAsync(messageBatch);

                var options = new ServiceBusReceiverOptions
                {
                    RetryOptions = new ServiceBusRetryOptions
                    {
                        TryTimeout     = TimeSpan.FromSeconds(5),
                        MaximumRetries = 0
                    }
                };
                ServiceBusReceiver receiver1 = await client.GetSessionReceiverAsync(
                    scope.QueueName,
                    options,
                    sessionId);

                Assert.That(
                    async() =>
                    await client.GetSessionReceiverAsync(
                        scope.QueueName,
                        options,
                        sessionId),
                    Throws.Exception);
            }
        }
Exemple #6
0
 internal PluginReceiver(string topicName, string subscriptionName, ServiceBusClient client, IEnumerable <Func <ServiceBusReceivedMessage, Task> > plugins, ServiceBusReceiverOptions options) :
     base(client, topicName, subscriptionName, options)
 {
     _plugins = plugins;
 }
Exemple #7
0
 internal PluginReceiver(string queueName, ServiceBusClient client, IEnumerable <Func <ServiceBusReceivedMessage, Task> > plugins, ServiceBusReceiverOptions options) :
     base(client, queueName, options)
 {
     _plugins = plugins;
 }