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ğerlendirilen 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 (EXISTS
IS NULL
), mantıksal/AND
/NOT
OR
, ilişkisel işleçlerin, basit sayısal aritmetik ve ile LIKE
eş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;")
}
Önemli
Kural eylemleri aracılığıyla sistem özelliklerini güncelleştirdiğinizde, bunun beklenen davranışı değiştirebileceğini unutmayın. Bazı özellikler yalnızca bir kuyruğa veya konuya ileti alındığında değerlendirilir. Bu nedenle, bir kural eyleminde bu özellikleri güncelleştirdiğinizde ve sonra bunları bir abonelikte teslim ettiğinizde, bunlar yoksayılır. Ancak, başka bir kuyruğa veya konuya otomatik iletme sırasında bunlar yeniden değerlendirilir.
- ScheduledEnqueueTime: Bu özelliği ayarladığınızda veya güncelleştirdiğinizde abonelikte yoksayılır.
- Yinelenenleri kaldırma ile MessageID: MessageID güncelleştirildiğinde ve yinelenen bir sonuçla sonuçlandığında abonelikte yinelenenleri kaldırma işlemi yapılmaz.
- Bölümleme ile SessionID: Bu senaryoda, oturum kimliği bölümlenmiş varlıkların bölüm anahtarıdır ve iletinin gönderileceği bölüme karar vermek için kullanılır. Kural eyleminde sessionID değerinin değiştirilmesi, bir ileti bir bölüme geldikten sonra bölüm anahtarının değiştirildiği anlamına gelir. Sonuç olarak, tüketici oturumda bu iletilerden bazılarını alamayabilir. Tüketici iletiyi alsa bile, değiştirilen bölüm anahtarı nedeniyle yanlış bölümden geliyormuş gibi görünür.
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.