Filtry tematów i akcje

Subskrybenci mogą zdefiniować, które komunikaty chcą odbierać z tematu. Komunikaty te są określone w formie co najmniej jednej nazwanej reguły subskrypcji. Każda reguła składa się z warunku filtru, który wybiera określone komunikaty i opcjonalnie zawiera akcję , która donotuje wybrany komunikat.

Wszystkie reguły bez akcji są łączone przy użyciu OR warunku i powodują pojedynczy komunikat w subskrypcji, nawet jeśli masz wiele pasujących reguł.

Każda reguła z akcją tworzy kopię komunikatu. Ten komunikat będzie miał właściwość o nazwie RuleName , gdzie wartość jest nazwą zgodnej reguły. Akcja może dodawać lub aktualizować właściwości albo usuwać właściwości z oryginalnego komunikatu w celu wygenerowania komunikatu w subskrypcji.

Rozważmy następujący scenariusz, w którym subskrypcja ma pięć reguł: dwie reguły z akcjami i pozostałe trzy bez akcji. W tym przykładzie, jeśli wyślesz jeden komunikat zgodny ze wszystkimi pięcioma regułami, otrzymasz trzy komunikaty w subskrypcji. To dwa komunikaty dla dwóch reguł z akcjami i jeden komunikat dla trzech reguł bez akcji.

Każda nowo utworzona subskrypcja tematu ma początkową domyślną regułę subskrypcji. Jeśli nie określisz jawnie warunku filtru dla reguły, zastosowany filtr jest prawdziwym filtrem, który umożliwia wybranie wszystkich komunikatów w subskrypcji. Reguła domyślna nie ma skojarzonej akcji adnotacji.

Uwaga

Ten artykuł dotyczy scenariuszy innych niż JMS. W przypadku scenariuszy JMS użyj selektorów komunikatów.

Filtry

Usługa Service Bus obsługuje trzy typy filtrów:

  • Filtry SQL
  • Filtry logiczne
  • Filtry korelacji

Poniższe sekcje zawierają szczegółowe informacje o tych filtrach.

Filtry SQL

SqlFilter zawiera wyrażenie warunkowe podobne do języka SQL, które zostanie ocenione w brokerze względem właściwości użytkownika i właściwości systemowych przychodzących komunikatów. Wszystkie właściwości systemu muszą być poprzedzone prefiksem sys. w wyrażeniu warunkowym. Podzbiór języka SQL dla warunków filtrowania sprawdza istnienie właściwości (), wartości null (EXISTSIS NULL), operatorów logicznych NOT/AND/OR, relacyjnych, prostych arytmetycznych liczbowych i prostego wzorca tekstu pasującego do LIKEelementu .

Oto przykład platformy .NET do definiowania filtru SQL:

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;")
}

Filtry logiczne

Wartości TrueFilter i FalseFilter powodują wybranie wszystkich przychodzących komunikatów (true) lub brak przychodzących komunikatów (false) dla subskrypcji. Te dwa filtry pochodzą z filtru SQL.

Oto przykład platformy .NET do definiowania filtru logicznego:

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

Filtry korelacji

Właściwość CorrelationFilter zawiera zestaw warunków, które są zgodne z co najmniej jedną właściwością użytkownika i systemu odbierającego komunikatu. Typowym zastosowaniem jest dopasowanie właściwości CorrelationId , ale aplikacja może również dopasować się do następujących właściwości:

  • ContentType
  • Label
  • MessageId
  • ReplyTo
  • ReplyToSessionId
  • SessionId
  • To
  • wszelkie właściwości zdefiniowane przez użytkownika.

Dopasowanie istnieje, gdy wartość przychodzącego komunikatu dla właściwości jest równa wartości określonej w filtrze korelacji. W przypadku wyrażeń ciągów jest uwzględniana wielkość liter. Jeśli określisz wiele właściwości dopasowania, filtr łączy je jako logiczny warunek AND, co oznacza, że filtr do dopasowania, wszystkie warunki muszą być zgodne.

Oto przykład platformy .NET do definiowania filtru korelacji:

// 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"} ));	

Użyj konstruktora CorrelationRuleFilter , który przyjmuje String argument , aby utworzyć filtr korelacji z identyfikatorem korelacji.

W przypadku używania konstruktora domyślnego CorrelationRuleFilter można przypisać właściwości systemu (ContentType, Label, , ReplyToMessageId, ReplyToSessionId, SessionId, To), i właściwości zdefiniowane przez użytkownika do filtrowania. Aby określić właściwości zdefiniowane przez użytkownika dla filtru korelacji, użyj właściwości Properties typu IDictionary <string, object>. Klucze dla tego słownika są właściwościami zdefiniowanymi przez użytkownika do wyszukiwania komunikatów. Wartości skojarzone z kluczami to wartości do skorelowania. Oto przykład.

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

Uwaga

  • Wszystkie filtry oceniają właściwości komunikatu. Filtry nie mogą ocenić treści komunikatu.
  • Złożone reguły filtrowania wymagają pojemności przetwarzania. W szczególności użycie reguł filtru SQL powoduje obniżenie ogólnej przepływności komunikatów na poziomie subskrypcji, tematu i przestrzeni nazw. Jeśli to możliwe, aplikacje powinny wybierać filtry korelacji w filtrach przypominających język SQL, ponieważ są znacznie bardziej wydajne w przetwarzaniu i mają mniejszy wpływ na przepływność.

Akcje

Za pomocą warunków filtru SQL można zdefiniować akcję, która może dodawać adnotacje do komunikatu, dodając, usuwając lub zastępując właściwości i ich wartości. Akcja używa wyrażenia przypominającego sql, które luźno opiera się na SQL UPDATE składni instrukcji. Akcja jest wykonywana po dopasowaniu komunikatu i przed wybraniem komunikatu do subskrypcji. Zmiany we właściwościach komunikatu są prywatne dla komunikatu skopiowanego do subskrypcji.

Oto przykład platformy .NET, który tworzy regułę SQL z akcją w celu zaktualizowania ilości, gdy kolor jest czerwony.

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;")
}

Wzorce użycia

  • Wzorzec emisji

    Najprostszym scenariuszem użycia tematu jest to, że każda subskrypcja pobiera kopię każdego komunikatu wysyłanego do tematu, co umożliwia wzorzec emisji.

  • Wzorzec partycjonowania

    Partycjonowanie używa filtrów do dystrybucji komunikatów w kilku istniejących subskrypcjach tematów w przewidywalny i wzajemnie wykluczający się sposób. Wzorzec partycjonowania jest używany, gdy system jest skalowany w poziomie w celu obsługi wielu różnych kontekstów w funkcjonalnych identycznych przedziałach, z których każdy przechowuje podzbiór ogólnych danych; na przykład informacje o profilu klienta. W przypadku partycjonowania wydawca przesyła komunikat do tematu bez konieczności znajomości modelu partycjonowania. Następnie komunikat zostanie przeniesiony do właściwej subskrypcji, z której można go pobrać przez procedurę obsługi komunikatów partycji.

  • Wzorzec routingu

    Routing używa filtrów do dystrybucji komunikatów między subskrypcjami tematów w przewidywalny sposób, ale niekoniecznie wyłącznie. W połączeniu z funkcją automatycznego przekazywania filtry tematów mogą służyć do tworzenia złożonych wykresów routingu w przestrzeni nazw usługi Service Bus na potrzeby dystrybucji komunikatów w regionie świadczenia usługi Azure. Usługa Azure Functions lub Azure Logic Apps działająca jako most między przestrzeniami nazw usługi Azure Service Bus umożliwia tworzenie złożonych globalnych topologii z bezpośrednią integracją z aplikacjami biznesowymi.

Uwaga

Ponieważ witryna Azure Portal obsługuje teraz funkcje Eksploratora usługi Service Bus, filtry subskrypcji można tworzyć lub edytować w portalu.

Następne kroki

Aby uzyskać więcej przykładów, zobacz Przykłady filtrów usługi Service Bus.