Ämnesfilter och åtgärder

Prenumeranter kan definiera vilka meddelanden som de vill ta emot från ett ämne. Dessa meddelanden anges i form av en eller flera namngivna prenumerationsregler. Varje regel består av ett filtervillkor som väljer specifika meddelanden och eventuellt innehåller en åtgärd som kommenterar det valda meddelandet.

Alla regler utan åtgärder kombineras med ett villkor och resulterar i ett OR enda meddelande i prenumerationen även om du har flera matchande regler.

Varje regel med en åtgärd skapar en kopia av meddelandet. Det här meddelandet har en egenskap med RuleName namnet där värdet är namnet på den matchande regeln. Åtgärden kan lägga till eller uppdatera egenskaper eller ta bort egenskaper från det ursprungliga meddelandet för att skapa ett meddelande i prenumerationen.

Föreställ dig följande scenario:

  • Prenumerationen har fem regler.
  • Två regler innehåller åtgärder.
  • Tre regler innehåller inte åtgärder.

Om du i det här exemplet skickar ett meddelande som matchar alla fem regler får du tre meddelanden i prenumerationen. Det är två meddelanden för två regler med åtgärder och ett meddelande för tre regler utan åtgärder.

Varje nyskapad ämnesprenumeration har en inledande standardprenumerationsregel. Om du inte uttryckligen anger ett filtervillkor för regeln är det tillämpade filtret det sanna filtret som gör att alla meddelanden kan väljas i prenumerationen. Standardregeln har ingen associerad anteckningsåtgärd.

Filter

Service Bus har stöd för tre filtervillkor:

  • SQL filter – Ett SqlFilter innehåller ett SQL-liknande villkorsuttryck som utvärderas i den autjämnaren mot de inkommande meddelandenas användardefinierade egenskaper och systemegenskaper. Alla systemegenskaper måste föregås av sys. i villkorsuttrycket. Delmängden SQL-språk för filtervillkorstester för förekomsten av egenskaper ( EXISTS ), null-värden ( ), logiska IS NULL NOT/AND/OR, relationsoperatorer, enkel numerisk aritmetik och enkelt textmönster som matchar LIKE med .

  • Booleska filterTrueFilter och FalseFilter gör antingen att alla inkommande meddelanden (sant) eller inget av de inkommande meddelandena (falskt) väljs för prenumerationen. Dessa två filter härleds från SQL filter.

  • Korrelationsfilter – Ett correlationFilter innehåller en uppsättning villkor som matchas mot ett eller flera av ett inkommande meddelandes användar- och systemegenskaper. Ett vanligt användningsområde är att matcha mot correlationId-egenskapen, men programmet kan också välja att matcha mot följande egenskaper:

    • Contenttype
    • Etikett
    • Messageid
    • ReplyTo
    • ReplyToSessionId
    • Sessionid
    • Till
    • alla användardefinierade egenskaper.

    Det finns en matchning när ett inkommande meddelandes värde för en egenskap är lika med det värde som anges i korrelationsfiltret. För stränguttryck är jämförelsen fallkänslig. När du anger flera matchningsegenskaper kombinerar filtret dem som ett logiskt AND-villkor, vilket innebär att alla villkor måste matcha för att filtret ska matcha.

Alla filter utvärderar meddelandeegenskaper. Filter kan inte utvärdera meddelandetexten.

Komplexa filterregler kräver bearbetningskapacitet. Användningen av regler för SQL leder till lägre övergripande meddelandegenomflöde på prenumerations-, ämnes- och namnområdesnivå. När det är möjligt bör program välja korrelationsfilter över SQL-liknande filter eftersom de är mycket effektivare vid bearbetning och har mindre inverkan på dataflödet.

Åtgärder

Med SQL-filtervillkor kan du definiera en åtgärd som kan kommentera meddelandet genom att lägga till, ta bort eller ersätta egenskaper och deras värden. Åtgärden använder ett SQL-liknande uttryck som löst lutar åt SQL UPDATE-instruktionssyntaxen. Åtgärden utförs på meddelandet när det har matchats och innan meddelandet väljs i prenumerationen. Ändringarna i meddelandeegenskaperna är privata för det meddelande som kopieras till prenumerationen.

Användningsmönster

Det enklaste användningsscenariot för ett ämne är att varje prenumeration får en kopia av varje meddelande som skickas till ett ämne, vilket möjliggör ett sändningsmönster.

Filter och åtgärder möjliggör ytterligare två grupper av mönster: partitionering och routning.

Partitionering använder filter för att distribuera meddelanden över flera befintliga ämnesprenumerationer på ett förutsägbart och ömsesidigt uteslutande sätt. Partitioneringsmönstret används när ett system skalas ut för att hantera många olika kontexter i funktionellt identiska fack som var och en innehåller en delmängd av övergripande data. till exempel kundprofilinformation. Vid partitionering skickar en utgivare meddelandet till ett ämne utan att behöva någon kunskap om partitioneringsmodellen. Meddelandet flyttas sedan till rätt prenumeration som den sedan kan hämtas från av partitionens meddelandehanterare.

Routning använder filter för att distribuera meddelanden mellan ämnesprenumerationer på ett förutsägbart sätt, men inte nödvändigtvis exklusivt. Tillsammans med funktionen för automatisk vidarebefordran kan ämnesfilter användas för att skapa komplexa routningsdiagram i ett Service Bus för meddelandedistribution inom en Azure-region. När Azure Functions eller Azure Logic Apps fungerar som en brygga mellan Azure Service Bus-namnrymder kan du skapa komplexa globala topologier med direkt integrering i affärsprogram.

Exempel

Exempel finns i Service Bus filterexempel.

Anteckning

Eftersom Azure Portal stöder Service Bus Explorer-funktioner kan du skapa eller redigera prenumerationsfilter från portalen.

Nästa steg

Prova exemplen på det språk du väljer för att utforska Azure Service Bus funktioner.

Hitta exempel för äldre .NET- och Java-klientbibliotek nedan: