Esempio n. 1
0
        public async Task AddRule(RuleDescription rule)
        {
            var newRule = (SqlFilter)rule.Filter;

            _log.LogInformation($"Creating rule {rule.Name} for subscriber {_client.SubscriptionName}");
            await _client.AddRuleAsync(rule).ConfigureAwait(false);
        }
Esempio n. 2
0
        public async Task CreatetopicprioritySubscription(string topicname)
        {
            var  client      = new ManagementClient(sbconnection);
            bool topicExists = await client.TopicExistsAsync(topicname).ConfigureAwait(false);

            string[] subscriptionarray = new string[] { "highprioritysubscription", "lowprioritysubscription" };
            if (topicExists)
            {
                foreach (var item in subscriptionarray)
                {
                    if (item == "highprioritysubscription")
                    {
                        SubscriptionDescription subName = new SubscriptionDescription(topicname, item);
                        subName.Status = 0;
                        RuleDescription subscriptionRule = new RuleDescription();
                        subscriptionRule.Filter = new SqlFilter("Priority >= 10");
                        var result01 = await client.CreateSubscriptionAsync(subName, subscriptionRule).ConfigureAwait(false);
                    }
                    else
                    {
                        SubscriptionDescription subName = new SubscriptionDescription(topicname, item);
                        subName.Status = 0;
                        RuleDescription subscriptionRule = new RuleDescription();
                        subscriptionRule.Filter = new SqlFilter("Priority < 10");
                        var result01 = await client.CreateSubscriptionAsync(subName, subscriptionRule).ConfigureAwait(false);
                    }
                }
            }
        }
        private void button3_Click(object sender, EventArgs e)
        {
            var connectionString = textBox1.Text; //System.Configuration.ConfigurationManager.AppSettings["Microsoft.ServiceBus.ConnectionString"];
            var topicName        = textBox2.Text; //System.Configuration.ConfigurationManager.AppSettings["TopicName"];
            var subscriptionName = textBox3.Text; //System.Configuration.ConfigurationManager.AppSettings["SubscriptionName"];

            RuleDescription rule      = new RuleDescription();
            SqlFilter       sqlFilter = new SqlFilter(textBox5.Text); //textBox5.Text = "eventDestination LIKE '%ALCO%'";

            rule.Filter = sqlFilter;
            rule.Name   = "$Default";

            //NamespaceManager namespaceManager = NamespaceManager.CreateFromConnectionString(connectionString);
            //var rules = namespaceManager.GetRules(topicName, subscriptionName);

            var subscriptionClient = SubscriptionClient.CreateFromConnectionString(connectionString, topicName, subscriptionName, ReceiveMode.PeekLock);

            try
            {
                subscriptionClient.RemoveRule("$Default");
                //subscriptionClient.RemoveRule("$EventDestination");
            }
            catch
            {
                //Ignore
            }
            subscriptionClient.AddRule("$Default", sqlFilter);
        }
Esempio n. 4
0
        public async Task <object> CreatetopicCorrelationFilterSubscription(string topicname)
        {
            var  client      = new ManagementClient(sbconnection);
            bool topicExists = await client.TopicExistsAsync(topicname).ConfigureAwait(false);

            if (topicExists)
            {
                SubscriptionDescription subName = new SubscriptionDescription(topicname, "CorrelationFilterSubscription");
                subName.Status = 0;
                RuleDescription subscriptionRule = new RuleDescription();
                subscriptionRule.Filter = new CorrelationFilter
                {
                    Label       = "Correlationfiltersample",
                    ReplyTo     = "x",
                    ContentType = "Finanical",
                };
                var result01 = await client.CreateSubscriptionAsync(subName, subscriptionRule).ConfigureAwait(false);

                return(result01);
            }
            else
            {
                return("Unable to create CorrelationFilter Subscription!!");
            }
        }
Esempio n. 5
0
        private void CreateServiceBusMessagingEntities()
        {
            var wasServiceBusConnectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.WarehouseAvailableStock");
            var wasSubscriptionName           = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.WarehouseAvailableStock.StockQuantitySubscription");
            //var vccSubscriptionName = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.WarehouseAvailableStock.VariantSkuMapSubscription");
            var wasTopicPath = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.WarehouseAvailableStock.TopicPath");

            var stockQuantityServiceBusConnectionString = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.StockQuantity");
            var discardedEventsSubscriptionName         = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.StockQuantity.DiscardedEventsSubscription");
            var stockQuantityTopicPath = CloudConfigurationManager.GetSetting("Microsoft.ServiceBus.ConnectionString.StockQuantity.TopicPath");

            var discardedEventSubscriptionClient = SubscriptionClient.CreateFromConnectionString(stockQuantityServiceBusConnectionString, stockQuantityTopicPath, discardedEventsSubscriptionName);

            // Set up Subscription Rules & Filters
            var isDiscardedRuleDescription = new RuleDescription("IsDiscarded");

            isDiscardedRuleDescription.Filter = new SqlFilter("IsDiscarded = 1");

            discardedEventSubscriptionClient.RemoveRule(RuleDescription.DefaultRuleName);
            discardedEventSubscriptionClient.RemoveRule(isDiscardedRuleDescription.Name);

            discardedEventSubscriptionClient.AddRule(isDiscardedRuleDescription);

            _maximumConcurrency = Convert.ToInt16(CloudConfigurationManager.GetSetting("MaximumConcurrency"));

            _warehouseAvailableStockChangedReceiver = new WarehouseAvailableStockChangedReceiver(_maximumConcurrency, wasServiceBusConnectionString, wasSubscriptionName, wasTopicPath, _topicClient, _stockQuantityAggregateStore, _skuVariantCacheManager, _telemetryClient);

            //_variantCopyCompletedReceiver = new VariantCopyCompletedReceiver(3, wasServiceBusConnectionString, vccSubscriptionName, wasTopicPath, _topicClient, _stockQuantityAggregateStore, _telemetryClient);
        }
        public JsonResult CreateTopic(string topicName)
        {
            bool success;

            try
            {
                var topic = this.namespaceManager.CreateTopic(topicName);
                var allMessagesSubscription    = this.namespaceManager.CreateSubscription(topic.Path, "AllMessages");
                var urgentMessagesSubscription = this.namespaceManager.CreateSubscription(topic.Path, "UrgentMessages", new SqlFilter("Urgent = '1'"));

                var ruleDescription = new RuleDescription()
                {
                    Filter = new SqlFilter("Important= '1' OR Priority = 'High'"),
                    Action = new SqlRuleAction("set Priority= 'High'")
                };
                var highPriorityMessagesSubscription = this.namespaceManager.CreateSubscription(topic.Path, "HighPriorityMessages", ruleDescription);
                success = true;
            }
            catch (Exception)
            {
                success = false;
            }

            return(this.Json(success, JsonRequestBehavior.AllowGet));
        }
Esempio n. 7
0
 private Rule MapRule(RuleDescription r)
 {
     if (r.Filter is SqlFilter)
     {
         return(new Rule
         {
             Name = r.Name,
             FilterType = "SqlFilter",
             Text = (r.Filter as SqlFilter).SqlExpression,
             CreatedAt = r.CreatedAt
         });
     }
     if (r.Filter is CorrelationFilter)
     {
         return(new Rule
         {
             Name = r.Name,
             FilterType = "CorrelationFilter",
             Text = "TODO",
             CreatedAt = r.CreatedAt
         });
     }
     return(new Rule
     {
         Name = r.Name,
         CreatedAt = r.CreatedAt,
         Text = "Unknown",
         FilterType = "UnknownFilterType"
     });
 }
        private async Task <SubscriptionDescription> GetOrCreateSubscription(string endpointName, CancellationToken cancellationToken)
        {
            var manageClient = new ManagementClient(connectionString);

            SubscriptionDescription subscriptionDescription;

            if (!await manageClient.SubscriptionExistsAsync(TopicPath, endpointName, cancellationToken))
            {
                subscriptionDescription = new SubscriptionDescription(TopicPath, endpointName)
                {
                    ForwardTo               = endpointName,
                    UserMetadata            = endpointName,
                    EnableBatchedOperations = true,
                    MaxDeliveryCount        = Int32.MaxValue,
                    EnableDeadLetteringOnFilterEvaluationExceptions = false,
                    LockDuration = TimeSpan.FromMinutes(5)
                };
                var defaultRule = new RuleDescription("$default")
                {
                    Filter = new SqlFilter("1=0")
                };
                await manageClient.CreateSubscriptionAsync(
                    subscriptionDescription, defaultRule, cancellationToken);
            }
            else
            {
                subscriptionDescription =
                    await manageClient.GetSubscriptionAsync(TopicPath, endpointName, cancellationToken);
            }

            return(subscriptionDescription);
        }
Esempio n. 9
0
        public static Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            string connectionStringServiceBus = "Endpoint=sb://plenttdata.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=H04PgzviylO3hman4MOuXfSWPHgrCUDOKd5835UQYas=";
            string topicName        = "pletopic";
            string SubscriptionName = "plesubscription";

            subscriptionClient = new SubscriptionClient(connectionStringServiceBus, topicName, SubscriptionName);

            Console.WriteLine("======================================================");
            Console.WriteLine("Press any key to exit after receiving all the messages.");
            Console.WriteLine("======================================================");

            var newRule = new RuleDescription("FilteredRule", new SqlFilter("From LIKE '%manhduc'"));

            subscriptionClient.AddRuleAsync(newRule);

            topicClient = new TopicClient(connectionStringServiceBus, topicName);

            RegisterMessageHandlerAndReceiveMessages();

            Console.ReadKey();

            topicClient.CloseAsync().Wait();

            return(null);
        }
Esempio n. 10
0
        private static async Task UpdateSubscriptionRules <TPayload>(
            ManagementClient managementClient,
            string channelName,
            string subscriptionName,
            RuleDescription ruleDescription,
            IMessageFactory <TPayload> messageFactory)
            where TPayload : class, IReceivedServiceBusMessage
        {
            var currentRules = await managementClient.GetRulesAsync(channelName, subscriptionName);

            if (currentRules.All(rule => ParseRuleName(rule) < messageFactory.CurrentVersion))
            {
                // First we add a rule so new messages can qualify
                await managementClient.CreateRuleAsync(channelName, subscriptionName, ruleDescription)
                .IgnoreRaceConditionException <MessagingEntityAlreadyExistsException>();

                // Remove each rule that are older than the one we just added
                currentRules = await managementClient.GetRulesAsync(channelName, subscriptionName);

                foreach (var rule in currentRules)
                {
                    if (ParseRuleName(rule) < messageFactory.CurrentVersion)
                    {
                        await managementClient.DeleteRuleAsync(channelName, subscriptionName, rule.Name)
                        .IgnoreRaceConditionException <MessagingEntityNotFoundException>();
                    }
                }
            }
        }
Esempio n. 11
0
 private static void TryAddRule(SubscriptionClient client, RuleDescription rule)
 {
     // try / catch is because there could be other processes initializing at the same time.
     try {
         client.AddRule(rule);
     } catch (MessagingEntityAlreadyExistsException) { }
 }
        public static AmqpMap GetRuleDescriptionMap(RuleDescription description)
        {
            var ruleDescriptionMap = new AmqpMap();

            switch (description.Filter)
            {
            case SqlFilter sqlFilter:
                var filterMap = GetSqlFilterMap(sqlFilter);
                ruleDescriptionMap[ManagementConstants.Properties.SqlFilter] = filterMap;
                break;

            case CorrelationFilter correlationFilter:
                var correlationFilterMap = GetCorrelationFilterMap(correlationFilter);
                ruleDescriptionMap[ManagementConstants.Properties.CorrelationFilter] = correlationFilterMap;
                break;

            default:
                throw new NotSupportedException(
                          Resources.RuleFilterNotSupported.FormatForUser(
                              description.Filter.GetType(),
                              nameof(SqlFilter),
                              nameof(CorrelationFilter)));
            }

            var amqpAction = GetRuleActionMap(description.Action as SqlRuleAction);

            ruleDescriptionMap[ManagementConstants.Properties.SqlRuleAction] = amqpAction;
            ruleDescriptionMap[ManagementConstants.Properties.RuleName]      = description.Name;

            return(ruleDescriptionMap);
        }
        public async Task SqlFilterParams()
        {
            var client           = new ServiceBusManagementClient(TestEnvironment.ServiceBusConnectionString);
            var topicName        = Guid.NewGuid().ToString("D").Substring(0, 8);
            var subscriptionName = Guid.NewGuid().ToString("D").Substring(0, 8);

            await client.CreateTopicAsync(topicName);

            await client.CreateSubscriptionAsync(topicName, subscriptionName);

            SqlRuleFilter sqlFilter = new SqlRuleFilter(
                "PROPERTY(@propertyName) = @stringPropertyValue " +
                "AND PROPERTY(intProperty) = @intPropertyValue " +
                "AND PROPERTY(longProperty) = @longPropertyValue " +
                "AND PROPERTY(boolProperty) = @boolPropertyValue " +
                "AND PROPERTY(doubleProperty) = @doublePropertyValue ")
            {
                Parameters =
                {
                    { "@propertyName",        "MyProperty" },
                    { "@stringPropertyValue", "string"     },
                    { "@intPropertyValue",               3 },
                    { "@longPropertyValue",             3L },
                    { "@boolPropertyValue",   true         },
                    { "@doublePropertyValue",          3.0 },
                }
            };

            RuleDescription rule = await client.CreateRuleAsync(topicName, subscriptionName, new RuleDescription("rule1", sqlFilter));

            Assert.AreEqual(sqlFilter, rule.Filter);

            await client.DeleteTopicAsync(topicName);
        }
        public async Task BlockUsers(IEnumerable <string> users)
        {
            if (!users.Any())
            {
                return;
            }

            string sqlExpression = null;

            foreach (var user in users)
            {
                if (sqlExpression == null)
                {
                    sqlExpression += $"sys.Label <> '{user}'";
                }
                else
                {
                    sqlExpression += $" AND sys.Label <> '{user}'";
                }
            }

            var blockUsersRule = new RuleDescription
            {
                Name   = "BlockUsers_SqlFilter",
                Filter = new SqlFilter(sqlExpression)
            };

            await Subscription.AddRule(Name, MyUsername, blockUsersRule);
        }
        private static async Task AddRules(Subscriber subscriber, SubscriptionClient subscriptionClient)
        {
            foreach (string label in subscriber.Labels)
            {
                RuleDescription ruleDescription = new RuleDescription
                {
                    Name   = label,
                    Filter = new CorrelationFilter {
                        Label = label
                    }
                };

                try
                {
                    await RemoveDefaultRuleAsync(subscriptionClient);

                    Console.WriteLine(
                        $"Trying to add the following rule: Name: {label}, Label: {label}");

                    await subscriptionClient.AddRuleAsync(ruleDescription);

                    Console.WriteLine("Rule was successfully added");
                }
                catch (ServiceBusException e)
                    when(e.Message != null && e.Message.Contains("already exists", StringComparison.InvariantCulture))
                    {
                        Console.WriteLine("The rule already exists");
                    }
                catch (Exception e)
                {
                    Console.WriteLine($"Some error occurred: {e.Message}");
                    throw;
                }
            }
        }
 public ProjectSourceCodeFilesRelatedRule(
     RuleDescription description,
     ISourceCodeFileContentCheck fileContentCheck)
 {
     _fileContentCheck = fileContentCheck;
     _ruleDescription  = description;
 }
 public SubscriptionConsumeTopologySpecification(TopicDescription topicDescription, SubscriptionDescription subscriptionDescription, RuleDescription rule, Filter filter)
 {
     _topicDescription        = topicDescription;
     _subscriptionDescription = subscriptionDescription;
     _rule   = rule;
     _filter = filter;
 }
Esempio n. 18
0
        public static AmqpMap GetRuleDescriptionMap(RuleDescription description)
        {
            AmqpMap ruleDescriptionMap = new AmqpMap();

            if (description.Filter is SqlFilter)
            {
                AmqpMap filterMap = GetSqlFilterMap(description.Filter as SqlFilter);
                ruleDescriptionMap[ManagementConstants.Properties.SqlFilter] = filterMap;
            }
            else if (description.Filter is CorrelationFilter)
            {
                AmqpMap correlationFilterMap = GetCorrelationFilterMap(description.Filter as CorrelationFilter);
                ruleDescriptionMap[ManagementConstants.Properties.CorrelationFilter] = correlationFilterMap;
            }
            else
            {
                throw new NotSupportedException(
                          Resources.RuleFilterNotSupported.FormatForUser(
                              description.Filter.GetType(),
                              nameof(SqlFilter),
                              nameof(CorrelationFilter)));
            }

            AmqpMap amqpAction = GetRuleActionMap(description.Action as SqlRuleAction);

            ruleDescriptionMap[ManagementConstants.Properties.SqlRuleAction] = amqpAction;

            return(ruleDescriptionMap);
        }
Esempio n. 19
0
        protected override void InstantiateReceiving(IDictionary <int, SubscriptionClient> serviceBusReceivers, string topicName, string topicSubscriptionName)
        {
            base.InstantiateReceiving(serviceBusReceivers, topicName, topicSubscriptionName);

            // https://docs.microsoft.com/en-us/azure/application-insights/app-insights-analytics-reference#summarize-operator
            // http://www.summa.com/blog/business-blog/everything-you-need-to-know-about-azure-service-bus-brokered-messaging-part-2#rulesfiltersactions
            // https://github.com/Azure-Samples/azure-servicebus-messaging-samples/tree/master/TopicFilters
            SubscriptionClient client = serviceBusReceivers[0];

            try
            {
                client.RemoveRule("CqrsConfiguredFilter");
            }
            catch (MessagingEntityNotFoundException)
            {
            }

            string filter = ConfigurationManager.GetSetting(FilterKeyConfigurationKey);

            if (!string.IsNullOrWhiteSpace(filter))
            {
                RuleDescription ruleDescription = new RuleDescription
                                                  (
                    "CqrsConfiguredFilter",
                    new SqlFilter(filter)
                                                  );
                client.AddRuleAsync(ruleDescription);
            }
        }
        public async Task OnAddRuleAsync(RuleDescription description)
        {
            try
            {
                var amqpRequestMessage = AmqpRequestMessage.CreateRequest(
                    ManagementConstants.Operations.AddRuleOperation,
                    this.ServiceBusConnection.OperationTimeout,
                    null);
                amqpRequestMessage.Map[ManagementConstants.Properties.RuleName]        = description.Name;
                amqpRequestMessage.Map[ManagementConstants.Properties.RuleDescription] =
                    AmqpMessageConverter.GetRuleDescriptionMap(description);

                AmqpResponseMessage response =
                    await
                        ((AmqpMessageReceiver)this.InnerReceiver).ExecuteRequestResponseAsync(amqpRequestMessage)
                    .ConfigureAwait(false);

                if (response.StatusCode != AmqpResponseStatusCode.OK)
                {
                    throw response.ToMessagingContractException();
                }
            }
            catch (Exception exception)
            {
                throw AmqpExceptionHelper.GetClientException(exception);
            }
        }
        /// <summary>
        /// Adds a rule to the current subscription to filter the messages reaching from topic to the subscription.
        /// </summary>
        ///
        /// <param name="description">The rule description that provides the rule to add.</param>
        /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> instance to signal the request to cancel the operation.</param>
        ///
        /// <remarks>
        /// You can add rules to the subscription that decides which messages from the topic should reach the subscription.
        /// A default <see cref="TrueFilter"/> rule named <see cref="RuleDescription.DefaultRuleName"/> is always added while creation of the Subscription.
        /// You can add multiple rules with distinct names to the same subscription.
        /// Multiple filters combine with each other using logical OR condition. i.e., If any filter succeeds, the message is passed on to the subscription.
        /// </remarks>
        ///
        /// <returns>A task instance that represents the asynchronous add rule operation.</returns>
        public virtual async Task AddRuleAsync(
            RuleDescription description,
            CancellationToken cancellationToken = default)
        {
            Argument.AssertNotClosed(IsDisposed, nameof(ServiceBusRuleManager));
            Argument.AssertNotNull(description, nameof(description));
            cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>();
            EntityNameFormatter.CheckValidRuleName(description.Name);
            ServiceBusEventSource.Log.AddRuleStart(Identifier, description.Name);

            try
            {
                await InnerRuleManager.AddRuleAsync(
                    description,
                    cancellationToken).ConfigureAwait(false);
            }
            catch (Exception exception)
            {
                ServiceBusEventSource.Log.AddRuleException(Identifier, exception);
                throw;
            }

            cancellationToken.ThrowIfCancellationRequested <TaskCanceledException>();
            ServiceBusEventSource.Log.AddRuleComplete(Identifier);
        }
Esempio n. 22
0
        private static async Task CreateTopicIfNotExist(ManagementClient mc, string name, ILogger log)
        {
            if (!await mc.TopicExistsAsync(name))
            {
                await mc.CreateTopicAsync(name);

                log.LogInformation($"Created topic {name}");
            }
            else
            {
                log.LogInformation($"Skipped topic {name}");
            }
            if (!await mc.SubscriptionExistsAsync(name, "bridge"))
            {
                var sd = new SubscriptionDescription(name, "bridge")
                {
                    ForwardTo = "bridge"
                };
                var rl = new RuleDescription("bridge")
                {
                    Filter = new SqlFilter("xbridge is null"),
                    Action = new SqlRuleAction($"set xbridge=1; set sys.to='{name}'")
                };
                await mc.CreateSubscriptionAsync(sd, rl);

                log.LogInformation($"Created bridge subscription on {name}");
            }
            else
            {
                log.LogInformation($"Skipped bridge subscription on {name}");
            }
        }
Esempio n. 23
0
        static async Task Main(string[] args)
        {
            managementClient = new ManagementClient(ServiceBusConnectionString);

            await CreateTopicIfNotExistsAsync(TopicName);
            await CreateSubscriptionIfNotExistsAsync(TopicName, "EvenNumbers");

            subscriptionClient = new SubscriptionClient(ServiceBusConnectionString, TopicName, "EvenNumbers");
            await RemoveDefaultRuleAsync();

            var isEvenFilter    = CreateFilter("IsEven", true);
            var ruleDescription = new RuleDescription("MyFilter", isEvenFilter);

            await AddRuleIfNotExistsAsync(ruleDescription);

            var messageHandlerOptions = new MessageHandlerOptions(ExceptionReceivedHandler)
            {
                MaxConcurrentCalls = 1,
                AutoComplete       = false
            };

            subscriptionClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);

            Console.ReadKey();
        }
        public async Task Subscribe(Type eventType, ContextBag context)
        {
            await CheckForManagePermissions().ConfigureAwait(false);

            var ruleName = eventType.FullName.Length > maxNameLength?ruleShortener(eventType.FullName) : eventType.FullName;

            var sqlExpression = $"[{Headers.EnclosedMessageTypes}] LIKE '%{eventType.FullName}%'";
            var rule          = new RuleDescription(ruleName, new SqlFilter(sqlExpression));

            var client = new ManagementClient(connectionStringBuilder, tokenProvider);

            try
            {
                var existingRule = await client.GetRuleAsync(topicPath, subscriptionName, rule.Name).ConfigureAwait(false);

                if (existingRule.Filter.ToString() != rule.Filter.ToString())
                {
                    rule.Action = existingRule.Action;

                    await client.UpdateRuleAsync(topicPath, subscriptionName, rule).ConfigureAwait(false);
                }
            }
            catch (MessagingEntityNotFoundException)
            {
                try
                {
                    await client.CreateRuleAsync(topicPath, subscriptionName, rule).ConfigureAwait(false);
                }
                catch (MessagingEntityAlreadyExistsException)
                {
                }
            }

            await client.CloseAsync().ConfigureAwait(false);
        }
        /// <summary>Adds the subscriber.</summary>
        /// <param name="routingKey">The routing key.</param>
        public void AddSubscriber(string routingKey)
        {
            ManagementClient client = new ManagementClient(_connectionString);

            if (!client.SubscriptionExistsAsync(_topicName, _topicSubscription).Result)
            {
                SubscriptionDescription subscriptionDescription = new SubscriptionDescription(_topicName, _topicSubscription)
                {
                    LockDuration = TimeSpan.FromMinutes(5)
                };

                if (!string.IsNullOrWhiteSpace(routingKey))
                {
                    RuleDescription ruleDescription = new RuleDescription
                    {
                        Filter = new Microsoft.Azure.ServiceBus.SqlFilter(routingKey)
                    };

                    client.CreateSubscriptionAsync(subscriptionDescription, ruleDescription);
                }
                else
                {
                    client.CreateSubscriptionAsync(subscriptionDescription);
                }
            }
        }
        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);
        }
Esempio n. 27
0
        public bool Create(IDictionary <string, object> apiRequestModel)
        {
            bool result = false;

            if (null != apiRequestModel)
            {
                SubscriptionModel subscriptionRequest = apiRequestModel.ToEntity <SubscriptionModel>();
                if (null != subscriptionRequest)
                {
                    Logger.LogMessage(string.Format("Checking if Subscription with name {0} already exists under Topic with name {0}...", subscriptionRequest.Name, subscriptionRequest.TopicName));
                    if (!CheckIfExists(subscriptionRequest.TopicName, subscriptionRequest.Name))
                    {
                        Logger.LogMessage(string.Format(CultureInfo.InvariantCulture, "Creating Subscription with name {0} under Topic {1} in service bus namespace", subscriptionRequest.Name, subscriptionRequest.TopicName));
                        SubscriptionDescription subscriptionDescription = GenerateSubscriptionDescription(subscriptionRequest);
                        RuleDescription         ruleDescription         = GenerateRuleDescription(subscriptionRequest);
                        if (null == ruleDescription)
                        {
                            nameSpaceManager.CreateSubscription(subscriptionDescription);
                        }
                        else
                        {
                            nameSpaceManager.CreateSubscription(subscriptionDescription, ruleDescription);
                        }
                        Logger.LogMessage(string.Format(CultureInfo.InvariantCulture, "Subscription with name {0} created under Topic with name {1} in service bus namespace", subscriptionRequest.Name, subscriptionRequest.TopicName));
                        result = true;
                    }
                }
            }
            return(result);
        }
 public void ApplyTo(ISourceCodeFileInNamespace sourceCodeFile, RuleDescription description,
                     IAnalysisReportInProgress report)
 {
     sourceCodeFile.CheckMethodsHavingCorrectAttributes(
         report,
         _ruleDto.ClassNameInclusionPattern,
         _ruleDto.MethodNameInclusionPattern, description);
 }
        /// <summary>
        /// Adds a rule to the current subscription to filter the messages reaching from topic to the subscription.
        /// </summary>
        /// <param name="description">The rule description that provides the rule to add.</param>
        /// <param name="cancellationToken"></param>
        /// <returns>A task instance that represents the asynchronous add rule operation.</returns>
        /// <remarks>
        /// You can add rules to the subscription that decides which messages from the topic should reach the subscription.
        /// A default <see cref="TrueFilter"/> rule named <see cref="RuleDescription.DefaultRuleName"/> is always added while creation of the Subscription.
        /// You can add multiple rules with distinct names to the same subscription.
        /// Multiple filters combine with each other using logical OR condition. i.e., If any filter succeeds, the message is passed on to the subscription.
        /// </remarks>
        public virtual async Task AddRuleAsync(
            RuleDescription description,
            CancellationToken cancellationToken = default)
        {
            await Task.Delay(1).ConfigureAwait(false);

            throw new NotImplementedException();
        }
 public RuleViolation PathRuleViolation(RuleDescription description,
                                        IReadOnlyList <IDependencyPathBasedRuleTarget> violationPath)
 {
     return(RuleViolation.Create(
                description,
                "Violating path: ",
                _reportFragmentsFormat.ApplyToPath(violationPath)));
 }
        public JsonResult CreateTopic(string topicName)
        {
            var topic = this.namespaceManager.CreateTopic(topicName);
            var allMessagesSubscription = this.namespaceManager.CreateSubscription(topic.Path, "AllMessages");
            var urgentMessagesSubscription = this.namespaceManager.CreateSubscription(topic.Path, "UrgentMessages", new SqlFilter("Urgent = '1'"));

            var ruleDescription = new RuleDescription()
            {
                Filter = new SqlFilter("Important= '1' OR Priority = 'High'"),
                Action = new SqlRuleAction("set Priority= 'High'")
            };

            var highPriorityMessagesSubscription = this.namespaceManager.CreateSubscription(topic.Path, "HighPriorityMessages", ruleDescription);

            return this.Json(topicName, JsonRequestBehavior.AllowGet);
        }
        private void btnAction_Click(object sender, EventArgs e)
        {
            try
            {
                if (serviceBusHelper == null ||
                    ruleWrapper == null ||
                    ruleWrapper.SubscriptionDescription == null)
                {
                    return;
                }
                if (btnAction.Text == RemoveText &&
                    ruleWrapper.SubscriptionDescription != null &&
                    !string.IsNullOrEmpty(ruleWrapper.SubscriptionDescription.Name) &&
                    ruleWrapper.RuleDescription != null &&
                    !string.IsNullOrEmpty(ruleWrapper.RuleDescription.Name))
                {
                    var deleteForm = new DeleteForm(ruleWrapper.RuleDescription.Name, RuleEntity.ToLower());
                    if (deleteForm.ShowDialog() == DialogResult.OK)
                    {
                        serviceBusHelper.RemoveRule(ruleWrapper.SubscriptionDescription, ruleWrapper.RuleDescription);
                    }
                    return;
                }
                if (btnAction.Text == AddText)
                {
                    if (string.IsNullOrEmpty(txtName.Text))
                    {
                        writeToLog(NameCannotBeNull);
                        return;
                    }

                    var ruleDescription = new RuleDescription(txtName.Text);

                    if (!string.IsNullOrEmpty(txtSqlFilterExpression.Text))
                    {
                        ruleDescription.Filter = new SqlFilter(txtSqlFilterExpression.Text);
                    }
                    if (!string.IsNullOrEmpty(txtSqlFilterAction.Text))
                    {
                        ruleDescription.Action = new SqlRuleAction(txtSqlFilterAction.Text);
                    }

                    ruleWrapper.RuleDescription = serviceBusHelper.AddRule(ruleWrapper.SubscriptionDescription, ruleDescription);
                    InitializeData();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
Esempio n. 33
0
        public void Setup(string subscription, string priority)
        {
            var namespaceManager = NamespaceManager.CreateFromConnectionString(this.serviceBusConnectionString);

            // Setup the topic.
            if (!namespaceManager.TopicExists(this.topicName))
            {
                try
                {
                    namespaceManager.CreateTopic(this.topicName);
                }
                catch (MessagingEntityAlreadyExistsException)
                {
                    Trace.TraceInformation("Messaging entity already created: " + this.topicName);
                }
                catch (MessagingException ex)
                {
                    var webException = ex.InnerException as WebException;
                    if (webException != null)
                    {
                        var response = webException.Response as HttpWebResponse;

                        // It's likely the conflicting operation being performed by the service bus is another queue create operation
                        // If we don't have a web response with status code 'Conflict' it's another exception
                        if (response == null || response.StatusCode != HttpStatusCode.Conflict)
                        {
                            throw;
                        }

                        Trace.TraceWarning("MessagingException HttpStatusCode.Conflict - Queue likely already exists or is being created or deleted for path: {0}", this.topicName);
                    }
                }
            }

            this.topicClient = TopicClient.CreateFromConnectionString(this.serviceBusConnectionString, this.topicName);
            this.topicClient.RetryPolicy = RetryPolicy.Default;

            // Setup the subscription.
            if (!string.IsNullOrEmpty(subscription))
            {
                if (!namespaceManager.SubscriptionExists(this.topicName, subscription))
                {
                    // Setup the filter for the subscription based on the priority.
                    var filter = new SqlFilter("Priority = '" + priority + "'");
                    var ruleDescription = new RuleDescription
                    {
                        Name = "PriorityFilter",
                        Filter = filter
                    };

                    try
                    {
                        namespaceManager.CreateSubscription(this.topicName, subscription, ruleDescription);
                    }
                    catch (MessagingEntityAlreadyExistsException)
                    {
                        Trace.TraceInformation("Messaging entity already created: " + subscription);
                    }
                    catch (MessagingException ex)
                    {
                        var webException = ex.InnerException as WebException;
                        if (webException != null)
                        {
                            var response = webException.Response as HttpWebResponse;

                            // It's likely the conflicting operation being performed by the service bus is another queue create operation
                            // If we don't have a web response with status code 'Conflict' it's another exception
                            if (response == null || response.StatusCode != HttpStatusCode.Conflict)
                            {
                                throw;
                            }

                            Trace.TraceWarning("MessagingException HttpStatusCode.Conflict - subscription likely already exists or is being created or deleted for path: {0}", subscription);
                        }
                    }
                }

                this.subscriptionClient = SubscriptionClient.CreateFromConnectionString(this.serviceBusConnectionString, this.topicName, subscription);
                this.subscriptionClient.RetryPolicy = RetryPolicy.Default;
            }
        }
        private void btnCreateDelete_Click(object sender, EventArgs e)
        {
            try
            {
                if (serviceBusHelper == null ||
                    subscriptionWrapper == null ||
                    subscriptionWrapper.TopicDescription == null)
                {
                    return;
                }
                if (btnCreateDelete.Text == DeleteText &&
                    subscriptionWrapper.SubscriptionDescription != null &&
                    !string.IsNullOrWhiteSpace(subscriptionWrapper.SubscriptionDescription.Name))
                {
                    using (var deleteForm = new DeleteForm(subscriptionWrapper.SubscriptionDescription.Name, SubscriptionEntity.ToLower()))
                    {
                        if (deleteForm.ShowDialog() == DialogResult.OK)
                        {
                            serviceBusHelper.DeleteSubscription(subscriptionWrapper.SubscriptionDescription);
                        }
                    }
                    return;
                }
                if (btnCreateDelete.Text == CreateText)
                {
                    if (string.IsNullOrWhiteSpace(txtName.Text))
                    {
                        writeToLog(NameCannotBeNull);
                        return;
                    }
                    var subscriptionDescription = new SubscriptionDescription(subscriptionWrapper.TopicDescription.Path, txtName.Text);
                    if (!string.IsNullOrWhiteSpace(txtUserMetadata.Text))
                    {
                        subscriptionDescription.UserMetadata = txtUserMetadata.Text;
                    }
                    if (!string.IsNullOrWhiteSpace(txtForwardTo.Text))
                    {
                        subscriptionDescription.ForwardTo = txtForwardTo.Text;
                    }
                    if (!string.IsNullOrWhiteSpace(txtForwardDeadLetteredMessagesTo.Text))
                    {
                        subscriptionDescription.ForwardDeadLetteredMessagesTo = txtForwardDeadLetteredMessagesTo.Text;
                    }
                    if (!string.IsNullOrWhiteSpace(txtMaxDeliveryCount.Text))
                    {
                        int value;
                        if (int.TryParse(txtMaxDeliveryCount.Text, out value))
                        {
                            subscriptionDescription.MaxDeliveryCount = value;
                        }
                        else
                        {
                            writeToLog(MaxDeliveryCountMustBeANumber);
                            return;
                        }
                    }

                    var days = 0;
                    var hours = 0;
                    var minutes = 0;
                    var seconds = 0;
                    var milliseconds = 0;

                    if (!string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveDays.Text) ||
                        !string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveHours.Text) ||
                        !string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveMinutes.Text) ||
                        !string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveSeconds.Text) ||
                        !string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveMilliseconds.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveDays.Text))
                        {
                            if (!int.TryParse(txtDefaultMessageTimeToLiveDays.Text, out days))
                            {
                                writeToLog(DefaultMessageTimeToLiveDaysMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveHours.Text))
                        {
                            if (!int.TryParse(txtDefaultMessageTimeToLiveHours.Text, out hours))
                            {
                                writeToLog(DefaultMessageTimeToLiveHoursMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveMinutes.Text))
                        {
                            if (!int.TryParse(txtDefaultMessageTimeToLiveMinutes.Text, out minutes))
                            {
                                writeToLog(DefaultMessageTimeToLiveMinutesMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveSeconds.Text))
                        {
                            if (!int.TryParse(txtDefaultMessageTimeToLiveSeconds.Text, out seconds))
                            {
                                writeToLog(DefaultMessageTimeToLiveSecondsMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtDefaultMessageTimeToLiveMilliseconds.Text))
                        {
                            if (!int.TryParse(txtDefaultMessageTimeToLiveMilliseconds.Text, out milliseconds))
                            {
                                writeToLog(DefaultMessageTimeToLiveMillisecondsMustBeANumber);
                                return;
                            }
                        }
                        subscriptionDescription.DefaultMessageTimeToLive = new TimeSpan(days, hours, minutes, seconds, milliseconds);
                    }

                    days = 0;
                    hours = 0;
                    minutes = 0;
                    seconds = 0;
                    milliseconds = 0;

                    if (!string.IsNullOrWhiteSpace(txtLockDurationDays.Text) ||
                        !string.IsNullOrWhiteSpace(txtLockDurationHours.Text) ||
                        !string.IsNullOrWhiteSpace(txtLockDurationMinutes.Text) ||
                        !string.IsNullOrWhiteSpace(txtLockDurationSeconds.Text) ||
                        !string.IsNullOrWhiteSpace(txtLockDurationMilliseconds.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtLockDurationDays.Text))
                        {
                            if (!int.TryParse(txtLockDurationDays.Text, out days))
                            {
                                writeToLog(LockDurationDaysMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtLockDurationHours.Text))
                        {
                            if (!int.TryParse(txtLockDurationHours.Text, out hours))
                            {
                                writeToLog(LockDurationHoursMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtLockDurationMinutes.Text))
                        {
                            if (!int.TryParse(txtLockDurationMinutes.Text, out minutes))
                            {
                                writeToLog(LockDurationMinutesMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtLockDurationSeconds.Text))
                        {
                            if (!int.TryParse(txtLockDurationSeconds.Text, out seconds))
                            {
                                writeToLog(LockDurationSecondsMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtLockDurationMilliseconds.Text))
                        {
                            if (!int.TryParse(txtLockDurationMilliseconds.Text, out milliseconds))
                            {
                                writeToLog(LockDurationMillisecondsMustBeANumber);
                                return;
                            }
                        }
                        subscriptionDescription.LockDuration = new TimeSpan(days, hours, minutes, seconds, milliseconds);
                    }

                    days = 0;
                    hours = 0;
                    minutes = 0;
                    seconds = 0;
                    milliseconds = 0;

                    if (!string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleDays.Text) ||
                        !string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleHours.Text) ||
                        !string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleMinutes.Text) ||
                        !string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleSeconds.Text) ||
                        !string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleMilliseconds.Text))
                    {
                        if (!string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleDays.Text))
                        {
                            if (!int.TryParse(txtAutoDeleteOnIdleDays.Text, out days))
                            {
                                writeToLog(AutoDeleteOnIdleDaysMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleHours.Text))
                        {
                            if (!int.TryParse(txtAutoDeleteOnIdleHours.Text, out hours))
                            {
                                writeToLog(AutoDeleteOnIdleHoursMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleMinutes.Text))
                        {
                            if (!int.TryParse(txtAutoDeleteOnIdleMinutes.Text, out minutes))
                            {
                                writeToLog(AutoDeleteOnIdleMinutesMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleSeconds.Text))
                        {
                            if (!int.TryParse(txtAutoDeleteOnIdleSeconds.Text, out seconds))
                            {
                                writeToLog(AutoDeleteOnIdleSecondsMustBeANumber);
                                return;
                            }
                        }
                        if (!string.IsNullOrWhiteSpace(txtAutoDeleteOnIdleMilliseconds.Text))
                        {
                            if (!int.TryParse(txtAutoDeleteOnIdleMilliseconds.Text, out milliseconds))
                            {
                                writeToLog(AutoDeleteOnIdleMillisecondsMustBeANumber);
                                return;
                            }
                        }
                        subscriptionDescription.AutoDeleteOnIdle = new TimeSpan(days, hours, minutes, seconds, milliseconds);
                    }

                    subscriptionDescription.EnableBatchedOperations = checkedListBox.GetItemChecked(EnableBatchedOperationsIndex);
                    subscriptionDescription.EnableDeadLetteringOnFilterEvaluationExceptions = checkedListBox.GetItemChecked(EnableDeadLetteringOnFilterEvaluationExceptionsIndex);
                    subscriptionDescription.EnableDeadLetteringOnMessageExpiration = checkedListBox.GetItemChecked(EnableDeadLetteringOnMessageExpirationIndex);
                    subscriptionDescription.RequiresSession = checkedListBox.GetItemChecked(RequiresSessionIndex);

                    var ruleDescription = new RuleDescription();

                    if (!string.IsNullOrWhiteSpace(txtFilter.Text))
                    {
                        ruleDescription.Filter = new SqlFilter(txtFilter.Text);
                    }
                    if (!string.IsNullOrWhiteSpace(txtAction.Text))
                    {
                        ruleDescription.Action = new SqlRuleAction(txtAction.Text);
                    }

                    subscriptionWrapper.SubscriptionDescription = serviceBusHelper.CreateSubscription(subscriptionWrapper.TopicDescription, 
                                                                                          subscriptionDescription, 
                                                                                          ruleDescription);
                    InitializeData();
                }
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
        }
        private static void SetupEntities(SampleScenario scenario)
        {
            switch (scenario)
            {
                case SampleScenario.Duplicate:
                    if (!nsm.QueueExists(DUPLICATE_QUEUE))
                    {
                        nsm.CreateQueue(new QueueDescription(DUPLICATE_QUEUE)
                        {
                            RequiresDuplicateDetection = true,
                            DuplicateDetectionHistoryTimeWindow = new TimeSpan(0, 0, 30)
                        }
                        );
                    }
                    break;
                case SampleScenario.AutoForward:
                    string oldQueue = "oldqueue";
                    if (!nsm.QueueExists(oldQueue))
                    {
                        nsm.CreateQueue(new QueueDescription(oldQueue)
                        {
                            ForwardTo = "dupequeue"
                        }
                        );
                    }
                    break;
                case SampleScenario.SubscriptionActions:
                    if (!nsm.TopicExists(ACTIONS_TOPIC))
                    {
                        var td = nsm.CreateTopic(ACTIONS_TOPIC);

                        var sd = new SubscriptionDescription(ACTIONS_TOPIC, ACTIONS_SUBSCRIPTION);

                        var sc = SubscriptionClient.Create(ACTIONS_TOPIC, ACTIONS_SUBSCRIPTION);
                        nsm.CreateSubscription(sd);
                        var rules = nsm.GetRules(ACTIONS_TOPIC, ACTIONS_SUBSCRIPTION);
                        foreach (var rule in rules)
                            sc.RemoveRule(rule.Name);

                        var rd = new RuleDescription("default",
                            new SqlFilter("NOT EXISTS(stage)"))
                            { Action = new SqlRuleAction("set stage = 1") };
                        sc.AddRule(rd);
                    }
                    break;

                default:
                    break;
            }
        }
 /// <summary>
 /// Adds a subscription to this topic, with a default pass-through filter added.
 /// </summary>
 /// <param name="topicDescription">A topic belonging to the current service namespace base.</param>
 /// <param name="subscriptionDescription">Metadata of the subscription to be created.</param>
 /// <param name="ruleDescription">The metadata describing the properties of the rule to be associated with the subscription.</param>
 /// <returns>Returns a newly-created SubscriptionDescription object.</returns>
 public SubscriptionDescription CreateSubscription(TopicDescription topicDescription,
                                                   SubscriptionDescription subscriptionDescription,
                                                   RuleDescription ruleDescription)
 {
     if (topicDescription == null)
     {
         throw new ArgumentException(TopicDescriptionCannotBeNull);
     }
     if (subscriptionDescription == null)
     {
         throw new ArgumentException(DescriptionCannotBeNull);
     }
     if (ruleDescription == null)
     {
         throw new ArgumentException(RuleDescriptionCannotBeNull);
     }
     var subscription = RetryHelper.RetryFunc(() => namespaceManager.CreateSubscription(subscriptionDescription, ruleDescription), writeToLog);
     WriteToLogIf(traceEnabled, string.Format(CultureInfo.CurrentCulture, SubscriptionCreated, subscription.Name, topicDescription.Path));
     OnCreate(new ServiceBusHelperEventArgs(new SubscriptionWrapper(subscription, topicDescription), EntityType.Subscription));
     return subscription;
 }
 /// <summary>
 /// Removes the rule passed as a argument.
 /// </summary>
 /// <param name="subscriptionDescription">A subscription belonging to the current service namespace base.</param>
 /// <param name="rule">The rule to remove.</param>
 public void RemoveRule(SubscriptionDescription subscriptionDescription, RuleDescription rule)
 {
     if (subscriptionDescription == null)
     {
         throw new ArgumentException(SubscriptionDescriptionCannotBeNull);
     }
     if (rule == null)
     {
         throw new ArgumentException(RuleCannotBeNull);
     }
     var subscriptionClient = MessagingFactory.CreateSubscriptionClient(subscriptionDescription.TopicPath,
                                                                        subscriptionDescription.Name);
     RetryHelper.RetryAction(() => subscriptionClient.RemoveRule(rule.Name), writeToLog);
     WriteToLogIf(traceEnabled, string.Format(CultureInfo.CurrentCulture, RuleDeleted, rule.Name, subscriptionClient.Name));
     OnDelete(new ServiceBusHelperEventArgs(new RuleWrapper(rule, subscriptionDescription), EntityType.Rule));
 }
 /// <summary>
 /// Adds a rule to this subscription, with a default pass-through filter added.
 /// </summary>
 /// <param name="subscriptionDescription">The subscription to add the rule to.</param>
 /// <param name="ruleDescription">Metadata of the rule to be created.</param>
 /// <returns>Returns a newly-created RuleDescription object.</returns>
 public RuleDescription AddRule(SubscriptionDescription subscriptionDescription, RuleDescription ruleDescription)
 {
     if (subscriptionDescription == null)
     {
         throw new ArgumentException(SubscriptionDescriptionCannotBeNull);
     }
     if (ruleDescription == null)
     {
         throw new ArgumentException(RuleDescriptionCannotBeNull);
     }
     var subscriptionClient = RetryHelper.RetryFunc(() => MessagingFactory.CreateSubscriptionClient(subscriptionDescription.TopicPath,
                                                                                                    subscriptionDescription.Name),
                                                                                                    writeToLog);
     RetryHelper.RetryAction(() => subscriptionClient.AddRule(ruleDescription), writeToLog);
     Func<IEnumerable<RuleDescription>> func = (() => namespaceManager.GetRules(subscriptionDescription.TopicPath, subscriptionDescription.Name));
     var rules = RetryHelper.RetryFunc(func, writeToLog);
     var rule = rules.FirstOrDefault(r => r.Name == ruleDescription.Name);
     WriteToLogIf(traceEnabled, string.Format(CultureInfo.CurrentCulture, RuleCreated, ruleDescription.Name, subscriptionDescription.Name));
     OnCreate(new ServiceBusHelperEventArgs(new RuleWrapper(rule, subscriptionDescription), EntityType.Rule));
     return rule;
 }
Esempio n. 39
0
 private Rule MapRule(RuleDescription r)
 {
     if (r.Filter is SqlFilter)
     {
         return new Rule
         {
             Name = r.Name,
             FilterType = "SqlFilter",
             Text = (r.Filter as SqlFilter).SqlExpression,
             CreatedAt = r.CreatedAt
         };
     }
     if (r.Filter is CorrelationFilter)
     {
         return new Rule
         {
             Name = r.Name,
             FilterType = "CorrelationFilter",
             Text = "TODO",
             CreatedAt = r.CreatedAt
         };
     }
     return new Rule
     {
         Name = r.Name,
         CreatedAt = r.CreatedAt,
         Text = "Unknown",
         FilterType = "UnknownFilterType"
     };
 }
Esempio n. 40
0
 /// <summary>
 /// Initializes a new instance of the RuleWrapper class.
 /// </summary>
 /// <param name="rule">A rule.</param>
 /// <param name="subscription">A subscription.</param>        
 public RuleWrapper(RuleDescription rule, SubscriptionDescription subscription)
 {
     RuleDescription = rule;
     SubscriptionDescription = subscription;
 }
Esempio n. 41
0
 private static void TryAddRule(SubscriptionClient client, RuleDescription rule)
 {
     // try / catch is because there could be other processes initializing at the same time.
     try
     {
         client.AddRule(rule);
     }
     catch (MessagingEntityAlreadyExistsException) { }
 }