public async Task RegisterMessageReceivingAsync(OrderPaidMessageFilter filter) { var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler) { MaxConcurrentCalls = 1, AutoComplete = false }; var rules = (await _subscriptionClient.GetRulesAsync()).ToList(); if (rules.Any()) { await _subscriptionClient.RemoveRuleAsync(RuleDescription.DefaultRuleName); } await _subscriptionClient.AddRuleAsync(new RuleDescription() { Filter = new CorrelationFilter { CorrelationId = filter.Value } }); _subscriptionClient.RegisterMessageHandler(HandleMessage, messageHandlerOptions); }
public async Task SetupSubscriptionRules() { var exitstingRules = await _subscriptionClient.GetRulesAsync(); var subscriptionRuleName = _subscriptionName + "-rule"; if (exitstingRules != null) { exitstingRules .Where(r => r.Name != subscriptionRuleName) .ToList() .ForEach(async r => await _subscriptionClient.RemoveRuleAsync(r.Name)); if (exitstingRules.Any(r => r.Name == subscriptionRuleName)) { return; } } var corrFilter = new CorrelationFilter(); corrFilter.Properties.Add(_filterProperty, true); var rule = new RuleDescription { Filter = corrFilter, Name = subscriptionRuleName }; await _subscriptionClient.AddRuleAsync(rule); }
private static async Task AddSQLFilters(ISubscriptionClient subscriptionClient) { var rules = await subscriptionClient.GetRulesAsync(); if (!rules.Any(r => r.Name == "PriceGreaterThan100")) { var filter = new SqlFilter("price > 100"); await subscriptionClient.AddRuleAsync("PriceGreaterThan100", filter); } }
private static async Task AddBooleanFilters(bool _catch) { var rules = await salesCancelSubscriptionClient.GetRulesAsync(); if (_catch) { if (!rules.Any(r => r.Name == "CatchAll")) { var catchAllFilter = new TrueFilter(); await salesCancelSubscriptionClient.AddRuleAsync("CatchAll", catchAllFilter); } } else { if (!rules.Any(r => r.Name == "CatchNothing")) { var catchNothingFilter = new FalseFilter(); await salesCancelSubscriptionClient.AddRuleAsync("CatchNothing", catchNothingFilter); } } }
private static async Task RemoveDefaultFilters(ISubscriptionClient subscriptionClient) { var rules = await subscriptionClient.GetRulesAsync(); foreach (var rule in rules) { if (rule.Name == RuleDescription.DefaultRuleName) { await subscriptionClient.RemoveRuleAsync(RuleDescription.DefaultRuleName); } } }
private async Task ValidateSubscriptionRulesAsync(ISubscriptionClient subscriptionClient, string filterName) { var filterExists = false; var hasDefaultFilter = false; var filterCount = 0; foreach (var rule in await subscriptionClient.GetRulesAsync()) { if (rule.Name == filterName && rule.Filter is CorrelationFilter filter && filter.Label == filterName) { filterExists = true; } if (rule.Name == "$Default") { hasDefaultFilter = true; } filterCount++; } if (hasDefaultFilter && filterName == "all") { return; } if (filterCount != 1 && filterExists || filterCount != 1 && hasDefaultFilter) { throw new Exception("Invalid combination of subscription name and filter"); } if (hasDefaultFilter) { await subscriptionClient.RemoveRuleAsync("$Default"); } if (filterExists == false) { await subscriptionClient.AddRuleAsync(new RuleDescription(filterName, new CorrelationFilter { ContentType = "application/json", Label = filterName })); } }
static async Task MainAsync() { await AsyncSetCalcbenchCredentials(); var connectionStringBuilder = new ServiceBusConnectionStringBuilder(ConfigurationManager.AppSettings["AzureServiceBusConnectionString"]); Enum.TryParse(ConfigurationManager.AppSettings["AzureServiceBusTransportType"], out TransportType transportType); var tokenProvider = TokenProvider.CreateSharedAccessSignatureTokenProvider(connectionStringBuilder.SasKeyName, connectionStringBuilder.SasKey); subscriptionClient = new SubscriptionClient(endpoint: connectionStringBuilder.Endpoint, topicPath: CalcbenchFilingsTopic, subscriptionName: ConfigurationManager.AppSettings["QueueSubscription"], tokenProvider: tokenProvider, transportType: transportType); var rules = await subscriptionClient.GetRulesAsync(); await Task.WhenAll(rules.Select(async rule => await subscriptionClient.RemoveRuleAsync(rule.Name))); await subscriptionClient.AddRuleAsync(new RuleDescription { Filter = new SqlFilter("FilingType = 'eightk_earningsPressRelease'"), Name = "PressReleasesOnly" }); Console.WriteLine("======================================================"); Console.WriteLine("Press ENTER key to exit after receiving all the messages."); Console.WriteLine("======================================================"); // Register subscription message handler and receive messages in a loop. RegisterOnMessageHandlerAndReceiveMessages(); Console.ReadKey(); await subscriptionClient.CloseAsync(); }