Пример #1
0
        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);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        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);
                }
            }
        }
Пример #6
0
        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
                }));
            }
        }
Пример #7
0
        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();
        }