private async Task <List <RuleProperties> > GetExistingRulesAsync() { var existingRules = new List <RuleProperties>(); await foreach (var existingRule in _serviceBusAdminClient.GetRulesAsync(_createSubscriptionOptions.TopicName, _createSubscriptionOptions.SubscriptionName)) { existingRules.Add(existingRule); } return(existingRules); }
protected async Task AssertSubscriptionRules(MessageHandlerMapping messageHandlerMapping, string subscription) { var asyncRules = _serviceBusAdminClient.GetRulesAsync(_topic, subscription); var actualRules = new List <RuleProperties>(); await foreach (var rule in asyncRules) { actualRules.Add(rule); } Assert.Single(actualRules.Where(r => r.Name == messageHandlerMapping.MessageType.Name)); var expectedCorrelationRuleFilter = BuildCorrelationRuleFilter(messageHandlerMapping.SubscriptionFilter); var actualRulesForMessageType = actualRules.Where(r => r.Name == messageHandlerMapping.MessageType.Name); Assert.Single(actualRulesForMessageType); Assert.Equal(expectedCorrelationRuleFilter, actualRulesForMessageType.First().Filter); }
private async Task CleanUpCustomFilters() { foreach (var subscription in Subscriptions) { try { var client = new ServiceBusAdministrationClient(ServiceBusConnectionString); IAsyncEnumerator <RuleProperties> rules = client.GetRulesAsync(TopicName, subscription).GetAsyncEnumerator(); while (await rules.MoveNextAsync()) { await client.DeleteRuleAsync(TopicName, subscription, rules.Current.Name); Console.WriteLine($"Rule {rules.Current.Name} has been removed."); } } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } Console.WriteLine("All default filters have been removed.\n"); await PresentMenu(); }
private static async Task RunAsync(string fullyQualifiedNamespace, string connection) { if (!string.IsNullOrEmpty(connection)) { s_client = new ServiceBusClient(Environment.GetEnvironmentVariable(connection)); s_adminClient = new ServiceBusAdministrationClient(Environment.GetEnvironmentVariable(connection)); } else if (!string.IsNullOrEmpty(fullyQualifiedNamespace)) { var defaultAzureCredential = new DefaultAzureCredential(); s_client = new ServiceBusClient(fullyQualifiedNamespace, defaultAzureCredential); s_adminClient = new ServiceBusAdministrationClient(fullyQualifiedNamespace, defaultAzureCredential); } else { throw new ArgumentException( "Either a fully qualified namespace or a connection string environment variable must be specified."); } Console.WriteLine($"Creating topic {TopicName}"); await s_adminClient.CreateTopicAsync(TopicName); s_sender = s_client.CreateSender(TopicName); // First Subscription is already created with default rule. Leave as is. Console.WriteLine($"Creating subscription {NoFilterSubscriptionName}"); await s_adminClient.CreateSubscriptionAsync(TopicName, NoFilterSubscriptionName); Console.WriteLine($"SubscriptionName: {NoFilterSubscriptionName}, Removing and re-adding Default Rule"); await s_adminClient.DeleteRuleAsync(TopicName, NoFilterSubscriptionName, RuleProperties.DefaultRuleName); await s_adminClient.CreateRuleAsync(TopicName, NoFilterSubscriptionName, new CreateRuleOptions(RuleProperties.DefaultRuleName, new TrueRuleFilter())); // 2nd Subscription: Add SqlFilter on Subscription 2 // In this scenario, rather than deleting the default rule after creating the subscription, // we will create the subscription along with our desired rule in a single operation. // See https://docs.microsoft.com/en-us/azure/service-bus-messaging/topic-filters to learn more about topic filters. Console.WriteLine($"Creating subscription {SqlFilterOnlySubscriptionName}"); await s_adminClient.CreateSubscriptionAsync( new CreateSubscriptionOptions(TopicName, SqlFilterOnlySubscriptionName), new CreateRuleOptions { Name = "RedSqlRule", Filter = new SqlRuleFilter("Color = 'Red'") }); // 3rd Subscription: Add the SqlFilter Rule and Action // See https://docs.microsoft.com/en-us/azure/service-bus-messaging/topic-filters#actions to learn more about actions. Console.WriteLine($"Creating subscription {SqlFilterWithActionSubscriptionName}"); await s_adminClient.CreateSubscriptionAsync( new CreateSubscriptionOptions(TopicName, SqlFilterWithActionSubscriptionName), new CreateRuleOptions { Name = "BlueSqlRule", Filter = new SqlRuleFilter("Color = 'Blue'"), Action = new SqlRuleAction("SET Color = 'BlueProcessed'") }); // 4th Subscription: Add Correlation Filter on Subscription 4 Console.WriteLine($"Creating subscription {CorrelationFilterSubscriptionName}"); await s_adminClient.CreateSubscriptionAsync( new CreateSubscriptionOptions(TopicName, CorrelationFilterSubscriptionName), new CreateRuleOptions { Name = "ImportantCorrelationRule", Filter = new CorrelationRuleFilter { Subject = "Red", CorrelationId = "important" } }); // Get Rules on Subscription, called here only for one subscription as example var rules = s_adminClient.GetRulesAsync(TopicName, CorrelationFilterSubscriptionName); await foreach (var rule in rules) { Console.WriteLine( $"GetRules:: SubscriptionName: {CorrelationFilterSubscriptionName}, CorrelationFilter Name: {rule.Name}, Rule: {rule.Filter}"); } // Send messages to Topic await SendMessagesAsync(); // Receive messages from 'NoFilterSubscription'. Should receive all 9 messages await ReceiveMessagesAsync(NoFilterSubscriptionName); // Receive messages from 'SqlFilterOnlySubscription'. Should receive all messages with Color = 'Red' i.e 3 messages await ReceiveMessagesAsync(SqlFilterOnlySubscriptionName); // Receive messages from 'SqlFilterWithActionSubscription'. Should receive all messages with Color = 'Blue' // i.e 3 messages AND all messages should have color set to 'BlueProcessed' await ReceiveMessagesAsync(SqlFilterWithActionSubscriptionName); // Receive messages from 'CorrelationFilterSubscription'. Should receive all messages with Color = 'Red' and CorrelationId = "important" // i.e 1 message await ReceiveMessagesAsync(CorrelationFilterSubscriptionName); Console.ResetColor(); Console.WriteLine("======================================================================="); Console.WriteLine("Completed Receiving all messages. Disposing clients and deleting topic."); Console.WriteLine("======================================================================="); Console.WriteLine("Disposing sender"); await s_sender.CloseAsync(); Console.WriteLine("Disposing client"); await s_client.DisposeAsync(); Console.WriteLine("Deleting topic"); // Deleting the topic will handle deleting all the subscriptions as well. await s_adminClient.DeleteTopicAsync(TopicName); }