Пример #1
0
 public async void Dispose()
 {
     await _subscriptionClient.CloseAsync();
 }
Пример #2
0
        public async Task Run(string connectionString)
        {
            // Start senders and receivers:
            Console.WriteLine("\nLaunching senders and receivers...");


            var topicClient = new TopicClient(connectionString, TopicName);

            Console.WriteLine("Preparing to send messages to {0}...", topicClient.Path);

            // Send messages to queue:
            Console.WriteLine("Sending messages to topic {0}", topicClient.Path);

            var rand = new Random();

            for (var i = 0; i < 100; ++i)
            {
                var msg = new Message()
                {
                    TimeToLive     = TimeSpan.FromMinutes(2),
                    UserProperties =
                    {
                        { "Priority", rand.Next(1, 4) }
                    }
                };

                await topicClient.SendAsync(msg);

                this.OutputMessageInfo("Sent: ", msg);
            }

            Console.WriteLine();


            // All messages sent
            Console.WriteLine("\nSender complete.");

            // start receive
            Console.WriteLine("Receiving messages by priority ...");
            var subClient1 = new Microsoft.Azure.ServiceBus.SubscriptionClient(connectionString,
                                                                               TopicName, "Priority1Subscription", ReceiveMode.PeekLock);
            var subClient2 = new Microsoft.Azure.ServiceBus.SubscriptionClient(connectionString,
                                                                               TopicName, "Priority2Subscription", ReceiveMode.PeekLock);
            var subClient3 = new Microsoft.Azure.ServiceBus.SubscriptionClient(connectionString,
                                                                               TopicName, "PriorityGreaterThan2Subscription", ReceiveMode.PeekLock);


            Func <SubscriptionClient, Message, CancellationToken, Task> callback = (c, message, ct) =>
            {
                this.OutputMessageInfo("Received: ", message);
                return(Task.CompletedTask);
            };

            subClient1.RegisterMessageHandler((m, c) => callback(subClient1, m, c),
                                              new MessageHandlerOptions(LogMessageHandlerException)
            {
                MaxConcurrentCalls = 10, AutoComplete = true
            });
            subClient2.RegisterMessageHandler((m, c) => callback(subClient1, m, c),
                                              new MessageHandlerOptions(LogMessageHandlerException)
            {
                MaxConcurrentCalls = 5, AutoComplete = true
            });
            subClient3.RegisterMessageHandler((m, c) => callback(subClient1, m, c),
                                              new MessageHandlerOptions(LogMessageHandlerException)
            {
                MaxConcurrentCalls = 1, AutoComplete = true
            });

            Task.WaitAny(
                Task.Run(() => Console.ReadKey()),
                Task.Delay(TimeSpan.FromSeconds(10)));

            await Task.WhenAll(subClient1.CloseAsync(), subClient2.CloseAsync(), subClient3.CloseAsync());
        }