public async Task CorrelationFilterProperties() { var topicName = Guid.NewGuid().ToString("D").Substring(0, 8); var subscriptionName = Guid.NewGuid().ToString("D").Substring(0, 8); var client = new ServiceBusManagementClient(TestEnvironment.ServiceBusConnectionString); await client.CreateTopicAsync(topicName); await client.CreateSubscriptionAsync(topicName, subscriptionName); var filter = new CorrelationRuleFilter(); filter.Properties.Add("stringKey", "stringVal"); filter.Properties.Add("intKey", 5); filter.Properties.Add("dateTimeKey", DateTime.UtcNow); RuleProperties rule = await client.CreateRuleAsync( topicName, subscriptionName, new CreateRuleOptions("rule1", filter)); Assert.True(filter.Properties.Count == 3); Assert.AreEqual(filter, rule.Filter); await client.DeleteTopicAsync(topicName); }
internal static AmqpMap GetCorrelationRuleFilterMap(CorrelationRuleFilter correlationRuleFilter) { var correlationRuleFilterMap = new AmqpMap { [ManagementConstants.Properties.CorrelationId] = correlationRuleFilter.CorrelationId, [ManagementConstants.Properties.MessageId] = correlationRuleFilter.MessageId, [ManagementConstants.Properties.To] = correlationRuleFilter.To, [ManagementConstants.Properties.ReplyTo] = correlationRuleFilter.ReplyTo, [ManagementConstants.Properties.Label] = correlationRuleFilter.Subject, [ManagementConstants.Properties.SessionId] = correlationRuleFilter.SessionId, [ManagementConstants.Properties.ReplyToSessionId] = correlationRuleFilter.ReplyToSessionId, [ManagementConstants.Properties.ContentType] = correlationRuleFilter.ContentType }; var propertiesMap = new AmqpMap(); foreach (var property in correlationRuleFilter.ApplicationProperties) { propertiesMap[new MapKey(property.Key)] = property.Value; } correlationRuleFilterMap[ManagementConstants.Properties.CorrelationRuleFilterProperties] = propertiesMap; return(correlationRuleFilterMap); }
public async Task CorrelationFilterProperties() { var topicName = Recording.Random.NewGuid().ToString("D").Substring(0, 8); var subscriptionName = Recording.Random.NewGuid().ToString("D").Substring(0, 8); var client = CreateClient(); await client.CreateTopicAsync(topicName); await client.CreateSubscriptionAsync(topicName, subscriptionName); var filter = new CorrelationRuleFilter(); filter.ApplicationProperties.Add("stringKey", "stringVal"); filter.ApplicationProperties.Add("intKey", 5); filter.ApplicationProperties.Add("dateTimeKey", Recording.Now.UtcDateTime); RuleProperties rule = await client.CreateRuleAsync( topicName, subscriptionName, new CreateRuleOptions("rule1", filter)); Assert.True(filter.ApplicationProperties.Count == 3); Assert.AreEqual(filter, rule.Filter); await client.DeleteTopicAsync(topicName); }
private void AddMessageVersionProperty(Type messageType, CorrelationRuleFilter filter) { var messageVersion = messageType.GetCustomAttribute <MessageVersionAttribute>(); if (messageVersion != null) { filter.ApplicationProperties.Add(_messageVersionPropertyName, messageVersion.Version); } }
private void AddMessageFilterProperties(MessageHandlerMapping messageHandlerMapping, Type messageType, CorrelationRuleFilter filter) { if (messageHandlerMapping.SubscriptionFilter?.MessageProperties.Count > 0) { AddCustomMessageProperties(messageHandlerMapping, filter); } else { AddMessageVersionProperty(messageType, filter); } }
protected static CorrelationRuleFilter BuildCorrelationRuleFilter(SubscriptionFilter subscriptionFilter) { var filter = new CorrelationRuleFilter { Subject = subscriptionFilter.Label }; foreach (var property in subscriptionFilter.MessageProperties) { filter.ApplicationProperties.Add(property.Key, property.Value); } return(filter); }
public static RuleFilter GetFilter(AmqpRuleFilterCodec amqpFilter) { RuleFilter filter; switch (amqpFilter.DescriptorCode) { case AmqpSqlRuleFilterCodec.Code: var amqpSqlFilter = (AmqpSqlRuleFilterCodec)amqpFilter; filter = new SqlRuleFilter(amqpSqlFilter.Expression); break; case AmqpTrueRuleFilterCodec.Code: filter = new TrueRuleFilter(); break; case AmqpFalseRuleFilterCodec.Code: filter = new FalseRuleFilter(); break; case AmqpCorrelationRuleFilterCodec.Code: var amqpCorrelationFilter = (AmqpCorrelationRuleFilterCodec)amqpFilter; var correlationFilter = new CorrelationRuleFilter { CorrelationId = amqpCorrelationFilter.CorrelationId, MessageId = amqpCorrelationFilter.MessageId, To = amqpCorrelationFilter.To, ReplyTo = amqpCorrelationFilter.ReplyTo, Subject = amqpCorrelationFilter.Subject, SessionId = amqpCorrelationFilter.SessionId, ReplyToSessionId = amqpCorrelationFilter.ReplyToSessionId, ContentType = amqpCorrelationFilter.ContentType }; foreach (var property in amqpCorrelationFilter.Properties) { correlationFilter.ApplicationProperties.Add(property.Key.Key.ToString(), property.Value); } filter = correlationFilter; break; default: throw new NotSupportedException($"Unknown filter descriptor code: {amqpFilter.DescriptorCode}"); } return(filter); }
public async Task BasicRuleCrudOperations() { var topicName = Recording.Random.NewGuid().ToString("D").Substring(0, 8); var subscriptionName = Recording.Random.NewGuid().ToString("D").Substring(0, 8); var client = CreateClient(); await client.CreateTopicAsync(topicName); var rule1 = new CreateRuleOptions { Filter = new TrueRuleFilter(), Name = "rule1" }; await client.CreateSubscriptionAsync( new CreateSubscriptionOptions(topicName, subscriptionName), rule1); RuleProperties getRule1 = await client.GetRuleAsync(topicName, subscriptionName, "rule1"); Assert.AreEqual(rule1, new CreateRuleOptions(getRule1)); var sqlRuleFilter = new SqlRuleFilter("stringValue = @stringParam AND intValue = @intParam AND longValue = @longParam AND dateValue = @dateParam AND timeSpanValue = @timeSpanParam"); sqlRuleFilter.Parameters.Add("@stringParam", "string"); sqlRuleFilter.Parameters.Add("@intParam", 1); sqlRuleFilter.Parameters.Add("@longParam", (long)12); sqlRuleFilter.Parameters.Add("@dateParam", Recording.Now.UtcDateTime); sqlRuleFilter.Parameters.Add("@timeSpanParam", TimeSpan.FromDays(1)); var rule2 = new CreateRuleOptions { Name = "rule2", Filter = sqlRuleFilter, Action = new SqlRuleAction("SET a='b'") }; await client.CreateRuleAsync(topicName, subscriptionName, rule2); RuleProperties getRule2 = await client.GetRuleAsync(topicName, subscriptionName, "rule2"); Assert.AreEqual(rule2, new CreateRuleOptions(getRule2)); var correlationRuleFilter = new CorrelationRuleFilter() { ContentType = "contentType", CorrelationId = "correlationId", Subject = "label", MessageId = "messageId", ReplyTo = "replyTo", ReplyToSessionId = "replyToSessionId", SessionId = "sessionId", To = "to" }; correlationRuleFilter.ApplicationProperties.Add("customKey", "customValue"); var rule3 = new CreateRuleOptions() { Name = "rule3", Filter = correlationRuleFilter, Action = null }; await client.CreateRuleAsync(topicName, subscriptionName, rule3); RuleProperties getRule3 = await client.GetRuleAsync(topicName, subscriptionName, "rule3"); Assert.AreEqual(rule3, new CreateRuleOptions(getRule3)); List <RuleProperties> ruleList = new List <RuleProperties>(); await foreach (RuleProperties rule in client.GetRulesAsync(topicName, subscriptionName)) { ruleList.Add(rule); } RuleProperties[] ruleArr = ruleList.ToArray(); Assert.True(ruleArr.Length == 3); Assert.AreEqual(rule1, new CreateRuleOptions(ruleArr[0])); Assert.AreEqual(rule2, new CreateRuleOptions(ruleArr[1])); Assert.AreEqual(rule3, new CreateRuleOptions(ruleArr[2])); ((CorrelationRuleFilter)getRule3.Filter).CorrelationId = "correlationIdModified"; SubscriptionProperties sub = await client.GetSubscriptionAsync(topicName, subscriptionName); RuleProperties updatedRule3 = await client.UpdateRuleAsync(topicName, subscriptionName, getRule3); Assert.AreEqual(getRule3, updatedRule3); bool exists = await client.RuleExistsAsync(topicName, subscriptionName, rule1.Name); Assert.True(exists); await client.DeleteRuleAsync(topicName, subscriptionName, "rule1"); Assert.That( async() => await client.GetRuleAsync(topicName, subscriptionName, "rule1"), Throws.InstanceOf <ServiceBusException>().And.Property(nameof(ServiceBusException.Reason)).EqualTo(ServiceBusFailureReason.MessagingEntityNotFound)); exists = await client.RuleExistsAsync(topicName, subscriptionName, rule1.Name); Assert.False(exists); await client.DeleteTopicAsync(topicName); }
private static void AddCustomMessageProperties(MessageHandlerMapping messageHandlerMapping, CorrelationRuleFilter filter) { if (messageHandlerMapping.SubscriptionFilter != null) { foreach (var property in messageHandlerMapping.SubscriptionFilter.MessageProperties) { filter.ApplicationProperties.Add(property.Key, property.Value); } } }