Konu başlığı filtreleri ve eylemleri

Aboneler, bir konu başlığından hangi iletileri almak istediklerini tanımlayabilir. Bu iletiler, bir veya daha fazla adlandırılmış abonelik kuralı biçiminde belirtilir. Her kural, belirli iletileri seçen ve isteğe bağlı olarak seçili iletiye ek açıklama ekleyen bir eylem içeren bir filtre koşulundan oluşur.

Eylem içermeyen tüm kurallar bir koşul kullanılarak birleştirilir OR ve birden çok eşleştirme kuralınız olsa bile abonelikte tek bir iletiyle sonuçlanır.

Eylem içeren her kural iletinin bir kopyasını oluşturur. Bu ileti, değerin eşleşen kuralın adı olduğu adlı RuleName bir özelliğe sahip olur. Eylem, abonelikte bir ileti oluşturmak için özellikleri ekleyebilir veya güncelleştirebilir ya da özgün iletiden özellikleri silebilir.

Aboneliğin beş kuralı olduğu aşağıdaki senaryoyu düşünün: eylemlerle iki kural ve eylem içermeyen diğer üç kural. Bu örnekte, beş kuralın tümüyle eşleşen bir ileti gönderirseniz abonelikte üç ileti alırsınız. Bu, eylemler içeren iki kural için iki ileti ve eylem içermeyen üç kural için bir iletidir.

Yeni oluşturulan her konu aboneliğinin ilk varsayılan abonelik kuralı vardır. Kural için açıkça bir filtre koşulu belirtmezseniz, uygulanan filtre tüm iletilerin aboneliğe seçilmesini sağlayan gerçek filtredir. Varsayılan kuralın ilişkili ek açıklama eylemi yoktur.

Not

Bu makale JMS dışı senaryolar için geçerlidir. JMS senaryoları için ileti seçicilerini kullanın.

Filtreler

Service Bus üç filtre türünü destekler:

  • SQL filtreleri
  • Boole filtreleri
  • Bağıntı filtreleri

Aşağıdaki bölümlerde bu filtrelerle ilgili ayrıntılar sağlanır.

SQL filtreleri

SqlFilter, gelen iletilerin kullanıcı tanımlı özelliklerine ve sistem özelliklerine karşı aracıda değerlendirilecek SQL benzeri bir koşullu ifade tutar. Koşullu ifadede tüm sistem özelliklerine ön ek sys. eklenmelidir. Filtre koşullarına yönelik SQL dili alt kümesi, özelliklerin (), null değerlerinin (EXISTSIS NULL), mantıksal/AND/NOTOR , ilişkisel işleçlerin, basit sayısal aritmetik ve ile LIKEeşleşen basit metin deseninin varlığını test eder.

SQL filtresi tanımlamaya yönelik bir .NET örneği aşağıda verilmişti:

adminClient = new ServiceBusAdministrationClient(connectionString);    

// Create a SQL filter with color set to blue and quantity to 10
await adminClient.CreateSubscriptionAsync(
		new CreateSubscriptionOptions(topicName, "ColorBlueSize10Orders"), 
		new CreateRuleOptions("BlueSize10Orders", new SqlRuleFilter("color='blue' AND quantity=10")));

// Create a SQL filter with color set to red
// Action is defined to set the quantity to half if the color is red
await adminClient.CreateRuleAsync(topicName, "ColorRed", new CreateRuleOptions 
{ 
	Name = "RedOrdersWithAction",
	Filter = new SqlRuleFilter("user.color='red'"),
	Action = new SqlRuleAction("SET quantity = quantity / 2;")
}

Boole filtreleri

TrueFilter ve FalseFilter, abonelik için tüm gelen iletilerin (true) veya gelen iletilerin hiçbirinin (false) seçilmemasına neden olur. Bu iki filtre SQL filtresinden türetilir.

Boole filtresi tanımlamaya yönelik bir .NET örneği aşağıda verilmiştır:

// 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()));	

Bağıntı filtreleri

CorrelationFilter, gelen bir iletinin kullanıcı ve sistem özellikleriyle eşleşen bir dizi koşula sahiptir. CorrelationId özelliğiyle eşleştirmek yaygın bir kullanımdır, ancak uygulama aşağıdaki özelliklerle eşleştirmeyi de seçebilir:

  • ContentType
  • Label
  • MessageId
  • ReplyTo
  • ReplyToSessionId
  • SessionId
  • To
  • kullanıcı tanımlı özellikler.

Bir özellik için gelen iletinin değeri bağıntı filtresinde belirtilen değere eşit olduğunda bir eşleşme vardır. Dize ifadeleri için karşılaştırma büyük/küçük harfe duyarlıdır. Birden çok eşleşme özelliği belirtirseniz, filtre bunları mantıksal AND koşulu olarak birleştirir; yani filtrenin eşleşmesi için tüm koşulların eşleşmesi gerekir.

Bağıntı filtresi tanımlamaya yönelik bir .NET örneği aşağıda verilmiştir:

// Create a correlation filter with color set to Red and priority set to High
await adminClient.CreateSubscriptionAsync(
		new CreateSubscriptionOptions(topicName, "HighPriorityRedOrders"), 
		new CreateRuleOptions("HighPriorityRedOrdersRule", new CorrelationRuleFilter() {Subject = "red", CorrelationId = "high"} ));	

Bağıntı CorrelationRuleFilter kimliğiyle bağıntı filtresi oluşturmak için bağımsız değişken alan String oluşturucuyu kullanın.

Varsayılan oluşturucuyu CorrelationRuleFilter kullandığınızda, filtreleme için sistem özellikleri (ContentType, Label, MessageId, ReplyTo, ReplyToSessionId, , SessionId, To) ve kullanıcı tanımlı özellikler atayabilirsiniz. Bağıntı filtresi için kullanıcı tanımlı özellikleri belirtmek için türünün IDictionary <string, object>özelliğini Properties kullanın. Bu sözlüğün anahtarları, iletileri aramak için kullanıcı tanımlı özelliklerdir. Anahtarlarla ilişkili değerler, bağıntı için kullanılan değerlerdir. İşte bir örnek.

var filter = new CorrelationFilter();
filter.Label = "abc";
filter.ReplyTo = "xdeu@hotmail.com";
filter.Properties["prop1"] = "abc";
filter.Properties["prop2"] = "xyz";

Not

  • Tüm filtreler ileti özelliklerini değerlendirir. Filtreler ileti gövdesini değerlendiremiyor.
  • Karmaşık filtre kuralları işleme kapasitesi gerektirir. Özellikle SQL filtre kurallarının kullanılması abonelik, konu ve ad alanı düzeyinde genel ileti aktarım hızının düşmesine neden olur. Mümkün olduğunda uygulamaların SQL benzeri filtreler yerine bağıntı filtrelerini seçmesi gerekir çünkü bunlar işlemede çok daha verimlidir ve aktarım hızı üzerinde daha az etkiye sahiptir.

Eylemler

SQL filtre koşullarıyla, özellikleri ve bunların değerlerini ekleyerek, kaldırarak veya değiştirerek iletiye açıklama ekleyebilecek bir eylem tanımlayabilirsiniz. Eylem, deyim söz dizimini gevşek bir şekilde kullanan SQL UPDATE SQL benzeri bir ifade kullanır. Eylem, ileti eşleştirildikten sonra ve ileti abonelikte seçilmeden önce gerçekleştirilir. İleti özelliklerindeki değişiklikler, aboneliğe kopyalanan iletiye özeldir.

Renk Kırmızı olduğunda miktarı güncelleştirmek için eylem içeren bir SQL kuralı oluşturan bir .NET örneği aşağıda verilmiştir.

adminClient = new ServiceBusAdministrationClient(connectionString);    

// Create a SQL filter with color set to red
// Action is defined to set the quantity to half if the color is red
await adminClient.CreateRuleAsync(topicName, "ColorRed", new CreateRuleOptions 
{ 
	Name = "RedOrdersWithAction",
	Filter = new SqlRuleFilter("user.color='red'"),
	Action = new SqlRuleAction("SET quantity = quantity / 2;")
}

Kullanım desenleri

  • Yayın düzeni

    Bir konu için en basit kullanım senaryosu, her aboneliğin bir konuya gönderilen her iletinin bir kopyasını almasıdır ve bu da yayın desenini etkinleştirir.

  • Bölümleme düzeni

    Bölümleme, iletileri tahmin edilebilir ve birbirini dışlayan bir şekilde mevcut birkaç konu aboneliği arasında dağıtmak için filtreleri kullanır. Bölümleme düzeni, bir sistemin ölçeği genişletildiğinde, her biri genel verilerin bir alt kümesini barındıran işlevsel olarak aynı bölmelerdeki birçok farklı bağlamı işlemek için kullanılır; örneğin, müşteri profili bilgileri. Bölümleme ile, bir yayımcı bölümleme modeli hakkında herhangi bir bilgiye gerek kalmadan iletiyi bir konuya gönderir. daha sonra ileti, bölümün ileti işleyicisi tarafından alınabileceği doğru aboneliğe taşınır.

  • Yönlendirme düzeni

    Yönlendirme, iletileri konu abonelikleri arasında tahmin edilebilir bir şekilde dağıtmak için filtreler kullanır, ancak bunun özel olması gerekmez. Otomatik iletme özelliğiyle birlikte, konu filtreleri bir Azure bölgesi içinde ileti dağıtımı için Service Bus ad alanında karmaşık yönlendirme grafikleri oluşturmak için kullanılabilir. Azure İşlevleri veya Azure Logic Apps, Azure Service Bus ad alanları arasında köprü görevi görürken, iş kolu uygulamalarıyla doğrudan tümleştirme ile karmaşık genel topolojiler oluşturabilirsiniz.

Not

Azure portalı artık Service Bus Gezgini işlevselliğini desteklediğinden abonelik filtreleri portaldan oluşturulabilir veya düzenlenebilir.

Sonraki adımlar

Daha fazla örnek için bkz . Service Bus filtre örnekleri.