public async Task UnsubscribeAsync <T, TH>() where T : IntegrationEvent where TH : IIntegrationEventHandler <T> { var eventName = typeof(T).Name; await _serviceBusAdministrationClient.DeleteRuleAsync(_eventBusConfiguration.TopicName, _eventBusConfiguration.Subscription, eventName); _logger.LogInformation("Unsubscribing from event '{EventName}'", eventName); _subscriptionManager.RemoveSubscription <T, TH>(); }
private static async Task Delete(this ServiceBusAdministrationClient admin, string topic, string subscription, string rule) { if ((await admin.RuleExistsAsync(topic, subscription, rule)).Value) { await admin.DeleteRuleAsync(topic, subscription, rule); } }
private async Task DeleteInvalidRulesAsync(List <CreateRuleOptions> newRules, List <RuleProperties> existingRules) { foreach (var existingRule in existingRules.Where(e => !ExistingRuleIsValid(newRules, e))) { await _serviceBusAdminClient.DeleteRuleAsync(_createSubscriptionOptions.TopicName, _createSubscriptionOptions.SubscriptionName, existingRule.Name); } }
public static async Task Main() { try { Console.WriteLine("Creating the Service Bus Administration Client object"); adminClient = new ServiceBusAdministrationClient(connectionString); Console.WriteLine($"Creating the topic {topicName}"); await adminClient.CreateTopicAsync(topicName); Console.WriteLine($"Creating the subscription {subscriptionAllOrders} for the topic with a SQL filter "); // Create a True Rule filter with an expression that always evaluates to true // It's equivalent to using SQL rule filter with 1=1 as the expression await adminClient.CreateSubscriptionAsync( new CreateSubscriptionOptions(topicName, subscriptionAllOrders), new CreateRuleOptions("AllOrders", new TrueRuleFilter())); Console.WriteLine($"Creating the subscription {subscriptionColorBlueSize10Orders} with a SQL filter"); // Create a SQL filter with color set to blue and quantity to 10 await adminClient.CreateSubscriptionAsync( new CreateSubscriptionOptions(topicName, subscriptionColorBlueSize10Orders), new CreateRuleOptions("BlueSize10Orders", new SqlRuleFilter("color='blue' AND quantity=10"))); Console.WriteLine($"Creating the subscription {subscriptionColorRed} with a SQL filter"); // Create a SQL filter with color equals to red and a SQL action with a set of statements await adminClient.CreateSubscriptionAsync(topicName, subscriptionColorRed); // remove the $Default rule await adminClient.DeleteRuleAsync(topicName, subscriptionColorRed, "$Default"); // now create the new rule. notice that user. prefix is used for the user/application property await adminClient.CreateRuleAsync(topicName, subscriptionColorRed, new CreateRuleOptions { Name = "RedOrdersWithAction", Filter = new SqlRuleFilter("user.color='red'"), Action = new SqlRuleAction("SET quantity = quantity / 2; REMOVE priority;SET sys.CorrelationId = 'low';") } ); Console.WriteLine($"Creating the subscription {subscriptionHighPriorityRedOrders} with a correlation filter"); // Create a correlation filter with color set to Red and priority set to High await adminClient.CreateSubscriptionAsync( new CreateSubscriptionOptions(topicName, subscriptionHighPriorityRedOrders), new CreateRuleOptions("HighPriorityRedOrders", new CorrelationRuleFilter() { Subject = "red", CorrelationId = "high" } )); // delete resources //await adminClient.DeleteTopicAsync(topicName); } catch (Exception e) { Console.WriteLine(e.ToString()); } }
public static Task Delete(ServiceBusAdministrationClient client, CommandArgument endpointName, CommandOption topicName, CommandOption subscriptionName, CommandArgument eventType, CommandOption ruleName) { var topicNameToUse = topicName.HasValue() ? topicName.Value() : Topic.DefaultTopicName; var subscriptionNameToUse = subscriptionName.HasValue() ? subscriptionName.Value() : endpointName.Value; var eventToSubscribeTo = eventType.Value; var ruleNameToUse = ruleName.HasValue() ? ruleName.Value() : eventToSubscribeTo; return(client.DeleteRuleAsync(topicNameToUse, subscriptionNameToUse, ruleNameToUse)); }
protected async Task CreateSubscriptionRulesAsync(List <MessageHandlerMapping> messageHandlerMappings, string subscription) { await _serviceBusAdminClient.DeleteRuleAsync(_topic, subscription, "$Default"); foreach (var messageHandlerMapping in messageHandlerMappings) { var correlationRuleFilter = BuildCorrelationRuleFilter(messageHandlerMappings[0].SubscriptionFilter); await _serviceBusAdminClient.CreateRuleAsync(_topic, subscription, new CreateRuleOptions(nameof(AircraftLanded), correlationRuleFilter)); } }
public async Task Unsubscribe(MessageMetadata eventType, ContextBag context, CancellationToken cancellationToken = default) { await namespacePermissions.CanManage(cancellationToken).ConfigureAwait(false); var ruleName = transportSettings.SubscriptionRuleNamingConvention(eventType.MessageType); try { await administrativeClient.DeleteRuleAsync(transportSettings.TopicName, subscriptionName, ruleName, cancellationToken).ConfigureAwait(false); } catch (ServiceBusException sbe) when(sbe.Reason == ServiceBusFailureReason.MessagingEntityNotFound) { } }
public static async Task CreateSubscription(string connectionString, string topic, string subscription, string subscriptionFilter) { CheckIsNotNullOrWhitespace(nameof(subscriptionFilter), subscriptionFilter); Debug.WriteLine($"CHECK: {subscriptionFilter}"); string filterClause = $"{SUBSCRIPTION_FILTER} IN ('{subscriptionFilter.ToLower()}')"; var client = new ServiceBusAdministrationClient(connectionString); await CreateSubscription(client, topic, subscription); await client.DeleteRuleAsync(topic, subscription, CreateRuleOptions.DefaultRuleName); var rule = new SqlRuleFilter(filterClause); await client.CreateRuleAsync(topic, subscription, new CreateRuleOptions(SUBSCRIPTION_FILTER, rule)); }
private async Task RemoveDefaultFilters() { Console.WriteLine($"Starting to remove default filters."); try { var client = new ServiceBusAdministrationClient(ServiceBusConnectionString); foreach (var subscription in Subscriptions) { await client.DeleteRuleAsync(TopicName, subscription, CreateRuleOptions.DefaultRuleName); Console.WriteLine($"Default filter for {subscription} has been removed."); } Console.WriteLine("All default Rules have been removed.\n"); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } await PresentMenu(); }
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); }