Abonnementsfilters instellen (Azure Service Bus)
Dit artikel bevat enkele voorbeelden van het instellen van filters voor abonnementen voor Service Bus-onderwerpen. Zie Filters voor conceptuele informatie over filters.
Azure Portal gebruiken
Als u abonnementsfilters wilt instellen in Azure Portal, gebruikt u de sectie Filters van de pagina Service Bus-abonnement .
Azure CLI gebruiken
Gebruik de az servicebus topic subscription rule create
opdracht om een regel te maken of te filteren op een abonnement.
Azure PowerShell gebruiken
Gebruik de Set-AzServiceBusRule
opdracht om een regel te maken of te filteren op een abonnement.
Notitie
Een abonnementsregel bestaat uit filters en acties. U kunt acties opgeven met behulp van CLI en PowerShell, maar niet met behulp van Azure Portal.
Filteren op systeemeigenschappen
Als u naar een systeemeigenschap in een filter wilt verwijzen, gebruikt u de volgende indeling: sys.<system-property-name>
sys.label LIKE '%bus%'
sys.messageid = 'xxxx'
sys.correlationid like 'abc-%'
Notitie
- Zie Berichten, nettoladingen en serialisatie voor een lijst met systeemeigenschappen.
- Gebruik systeemeigenschapsnamen van Azure.Messaging.ServiceBus.ServiceBusMessage in uw filters.
Subject
van Azure.Messaging.ServiceBus.ServiceBusMessage wordt toegewezen aanLabel
in het afgeschafte Microsoft.Azure.ServiceBus.Message.
Filteren op berichteigenschappen
Hier volgen de voorbeelden van het gebruik van toepassings- of gebruikerseigenschappen in een filter. U hebt toegang tot toepassingseigenschappen die zijn ingesteld met behulp van Azure.Messaging.ServiceBus.ServiceBusMessage.ApplicationProperties) (meest recente) of gebruikerseigenschappen die zijn ingesteld door Microsoft.Azure.ServiceBus.ServiceBusMessage (afgeschaft) met behulp van de syntaxis: user.property-name
of alleenproperty-name
.
MessageProperty = 'A'
user.SuperHero like 'SuperMan%'
Op 30 september 2026 gaan we de Azure Service Bus SDK-bibliotheken WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus en com.microsoft.azure.servicebus buiten gebruik stellen, die niet voldoen aan de Azure SDK-richtlijnen. We beëindigen ook de ondersteuning van het SBMP-protocol, zodat u dit protocol na 30 september 2026 niet meer kunt gebruiken. Migreer naar de nieuwste Azure SDK-bibliotheken, die vóór die datum essentiële beveiligingsupdates en verbeterde mogelijkheden bieden.
Hoewel de oudere bibliotheken nog steeds meer dan 30 september 2026 kunnen worden gebruikt, ontvangen ze geen officiële ondersteuning en updates meer van Microsoft. Zie de aankondiging van de buitengebruikstelling van de ondersteuning voor meer informatie.
Filteren op berichteigenschappen met speciale tekens
Als de naam van de berichteigenschap speciale tekens bevat, gebruikt u dubbele aanhalingstekens ("
) om de naam van de eigenschap in te sluiten. Als de naam van de eigenschap bijvoorbeeld is "http://schemas.microsoft.com/xrm/2011/Claims/EntityLogicalName"
, gebruikt u de volgende syntaxis in het filter.
"http://schemas.microsoft.com/xrm/2011/Claims/EntityLogicalName" = 'account'
Filteren op berichteigenschappen met numerieke waarden
In de volgende voorbeelden ziet u hoe u eigenschappen met numerieke waarden in filters kunt gebruiken.
MessageProperty = 1
MessageProperty > 1
MessageProperty > 2.08
MessageProperty = 1 AND MessageProperty2 = 3
MessageProperty = 1 OR MessageProperty2 = 3
Op parameters gebaseerde filters
Hier volgen enkele voorbeelden van het gebruik van filters op basis van parameters. In deze voorbeelden DataTimeMp
is een berichteigenschap van het type DateTime
en @dtParam
wordt een parameter doorgegeven aan het filter als een DateTime
object.
DateTimeMp < @dtParam
DateTimeMp > @dtParam
(DateTimeMp2-DateTimeMp1) <= @timespan //@timespan is a parameter of type TimeSpan
DateTimeMp2-DateTimeMp1 <= @timespan
IN en NIET IN gebruiken
StoreId IN('Store1', 'Store2', 'Store3')
sys.To IN ('Store5','Store6','Store7') OR StoreId = 'Store8'
sys.To NOT IN ('Store1','Store2','Store3','Store4','Store5','Store6','Store7','Store8') OR StoreId NOT IN ('Store1','Store2','Store3','Store4','Store5','Store6','Store7','Store8')
Zie het voorbeeld Onderwerpfilters op GitHub voor een C#-voorbeeld.
Correlatiefilters
Correlatiefilter met CorrelationID
new CorrelationFilter("Contoso");
Hiermee worden berichten gefilterd die CorrelationID
zijn ingesteld op Contoso
.
Notitie
De klasse CorrelationRuleFilter in .NET bevindt zich in de naamruimte Azure.Messaging.ServiceBus.Administration . Zie deze code op GitHub voor voorbeeldcode die laat zien hoe u filters in het algemeen maakt met behulp van .NET.
Correlatiefilter met systeem- en gebruikerseigenschappen
var filter = new CorrelationRuleFilter();
filter.Label = "Important";
filter.ReplyTo = "johndoe@contoso.com";
filter.Properties["color"] = "Red";
Dit komt overeen met: sys.ReplyTo = 'johndoe@contoso.com' AND sys.Label = 'Important' AND color = 'Red'
.NET-voorbeeld voor het maken van abonnementsfilters
Hier volgt een .NET C#-voorbeeld waarmee de volgende Service Bus-entiteiten worden gemaakt:
- Service Bus-onderwerp met de naam
topicfiltersampletopic
- Abonnement op het onderwerp met de naam
AllOrders
true rule filter, wat gelijk is aan een SQL-regelfilter met expressie1=1
. - Abonnement met de naam
ColorBlueSize10Orders
van een SQL-filterexpressiecolor='blue' AND quantity=10
- Abonnement met de naam
ColorRed
van een SQL-filterexpressiecolor='red'
en een actie - Abonnement met de naam
HighPriorityRedOrders
van een correlatiefilterexpressieSubject = "red", CorrelationId = "high"
Zie de opmerkingen bij inlinecode voor meer informatie.
namespace CreateTopicsAndSubscriptionsWithFilters
{
using Azure.Messaging.ServiceBus.Administration;
using System;
using System.Threading.Tasks;
public class Program
{
// Service Bus Administration Client object to create topics and subscriptions
static ServiceBusAdministrationClient adminClient;
// connection string to the Service Bus namespace
static readonly string connectionString = "<YOUR SERVICE BUS NAMESPACE - CONNECTION STRING>";
// name of the Service Bus topic
static readonly string topicName = "topicfiltersampletopic";
// names of subscriptions to the topic
static readonly string subscriptionAllOrders = "AllOrders";
static readonly string subscriptionColorBlueSize10Orders = "ColorBlueSize10Orders";
static readonly string subscriptionColorRed = "ColorRed";
static readonly string subscriptionHighPriorityRedOrders = "HighPriorityRedOrders";
public static async Task Main()
{
try
{
Console.WriteLine("Creating the Service Bus Administration Client object");
adminClient = new ServiceBusAdministrationClient(connectionString);
Console.WriteLine($"Creating the topic {topicName}");
await adminClient.CreateTopicAsync(topicName);
Console.WriteLine($"Creating the subscription {subscriptionAllOrders} for the topic with a True filter ");
// 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()));
Console.WriteLine($"Creating the subscription {subscriptionColorBlueSize10Orders} with a SQL filter");
// Create a SQL filter with color set to blue and quantity to 10
await adminClient.CreateSubscriptionAsync(
new CreateSubscriptionOptions(topicName, subscriptionColorBlueSize10Orders),
new CreateRuleOptions("BlueSize10Orders", new SqlRuleFilter("color='blue' AND quantity=10")));
Console.WriteLine($"Creating the subscription {subscriptionColorRed} with a SQL filter");
// Create a SQL filter with color equals to red and a SQL action with a set of statements
await adminClient.CreateSubscriptionAsync(topicName, subscriptionColorRed);
// remove the $Default rule
await adminClient.DeleteRuleAsync(topicName, subscriptionColorRed, "$Default");
// now create the new rule. notice that user. prefix is used for the user/application property
await adminClient.CreateRuleAsync(topicName, subscriptionColorRed, new CreateRuleOptions
{
Name = "RedOrdersWithAction",
Filter = new SqlRuleFilter("user.color='red'"),
Action = new SqlRuleAction("SET quantity = quantity / 2; REMOVE priority;SET sys.CorrelationId = 'low';")
}
);
Console.WriteLine($"Creating the subscription {subscriptionHighPriorityRedOrders} with a correlation filter");
// Create a correlation filter with color set to Red and priority set to High
await adminClient.CreateSubscriptionAsync(
new CreateSubscriptionOptions(topicName, subscriptionHighPriorityRedOrders),
new CreateRuleOptions("HighPriorityRedOrders", new CorrelationRuleFilter() {Subject = "red", CorrelationId = "high"} ));
// delete resources
//await adminClient.DeleteTopicAsync(topicName);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
.NET-voorbeeld voor het verzenden van ontvangen berichten
namespace SendAndReceiveMessages
{
using System;
using System.Text;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;
using Newtonsoft.Json;
public class Program
{
const string TopicName = "TopicFilterSampleTopic";
const string SubscriptionAllMessages = "AllOrders";
const string SubscriptionColorBlueSize10Orders = "ColorBlueSize10Orders";
const string SubscriptionColorRed = "ColorRed";
const string SubscriptionHighPriorityOrders = "HighPriorityRedOrders";
// connection string to your Service Bus namespace
static string connectionString = "<YOUR SERVICE BUS NAMESPACE - CONNECTION STRING>";
// the client that owns the connection and can be used to create senders and receivers
static ServiceBusClient client;
// the sender used to publish messages to the topic
static ServiceBusSender sender;
// the receiver used to receive messages from the subscription
static ServiceBusReceiver receiver;
public async Task SendAndReceiveTestsAsync(string connectionString)
{
// This sample demonstrates how to use advanced filters with ServiceBus topics and subscriptions.
// The sample creates a topic and 3 subscriptions with different filter definitions.
// Each receiver will receive matching messages depending on the filter associated with a subscription.
// Send sample messages.
await this.SendMessagesToTopicAsync(connectionString);
// Receive messages from subscriptions.
await this.ReceiveAllMessageFromSubscription(connectionString, SubscriptionAllMessages);
await this.ReceiveAllMessageFromSubscription(connectionString, SubscriptionColorBlueSize10Orders);
await this.ReceiveAllMessageFromSubscription(connectionString, SubscriptionColorRed);
await this.ReceiveAllMessageFromSubscription(connectionString, SubscriptionHighPriorityOrders);
}
async Task SendMessagesToTopicAsync(string connectionString)
{
// Create the clients that we'll use for sending and processing messages.
client = new ServiceBusClient(connectionString);
sender = client.CreateSender(TopicName);
Console.WriteLine("\nSending orders to topic.");
// Now we can start sending orders.
await Task.WhenAll(
SendOrder(sender, new Order()),
SendOrder(sender, new Order { Color = "blue", Quantity = 5, Priority = "low" }),
SendOrder(sender, new Order { Color = "red", Quantity = 10, Priority = "high" }),
SendOrder(sender, new Order { Color = "yellow", Quantity = 5, Priority = "low" }),
SendOrder(sender, new Order { Color = "blue", Quantity = 10, Priority = "low" }),
SendOrder(sender, new Order { Color = "blue", Quantity = 5, Priority = "high" }),
SendOrder(sender, new Order { Color = "blue", Quantity = 10, Priority = "low" }),
SendOrder(sender, new Order { Color = "red", Quantity = 5, Priority = "low" }),
SendOrder(sender, new Order { Color = "red", Quantity = 10, Priority = "low" }),
SendOrder(sender, new Order { Color = "red", Quantity = 5, Priority = "low" }),
SendOrder(sender, new Order { Color = "yellow", Quantity = 10, Priority = "high" }),
SendOrder(sender, new Order { Color = "yellow", Quantity = 5, Priority = "low" }),
SendOrder(sender, new Order { Color = "yellow", Quantity = 10, Priority = "low" })
);
Console.WriteLine("All messages sent.");
}
async Task SendOrder(ServiceBusSender sender, Order order)
{
var message = new ServiceBusMessage(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(order)))
{
CorrelationId = order.Priority,
Subject = order.Color,
ApplicationProperties =
{
{ "color", order.Color },
{ "quantity", order.Quantity },
{ "priority", order.Priority }
}
};
await sender.SendMessageAsync(message);
Console.WriteLine("Sent order with Color={0}, Quantity={1}, Priority={2}", order.Color, order.Quantity, order.Priority);
}
async Task ReceiveAllMessageFromSubscription(string connectionString, string subsName)
{
var receivedMessages = 0;
receiver = client.CreateReceiver(TopicName, subsName, new ServiceBusReceiverOptions() { ReceiveMode = ServiceBusReceiveMode.ReceiveAndDelete } );
// Create a receiver from the subscription client and receive all messages.
Console.WriteLine("\nReceiving messages from subscription {0}.", subsName);
while (true)
{
var receivedMessage = await receiver.ReceiveMessageAsync(TimeSpan.FromSeconds(10));
if (receivedMessage != null)
{
foreach (var prop in receivedMessage.ApplicationProperties)
{
Console.Write("{0}={1},", prop.Key, prop.Value);
}
Console.WriteLine("CorrelationId={0}", receivedMessage.CorrelationId);
receivedMessages++;
}
else
{
// No more messages to receive.
break;
}
}
Console.WriteLine("Received {0} messages from subscription {1}.", receivedMessages, subsName);
}
public static async Task Main()
{
try
{
Program app = new Program();
await app.SendAndReceiveTestsAsync(connectionString);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
class Order
{
public string Color
{
get;
set;
}
public int Quantity
{
get;
set;
}
public string Priority
{
get;
set;
}
}
}
Volgende stappen
Bekijk de volgende voorbeelden:
Als u Azure Service Bus-functies wilt verkennen, probeert u de voorbeelden in de taal van uw keuze.
- Voorbeelden van Azure Service Bus-clientbibliotheek voor .NET (nieuwste)
- Voorbeelden van Azure Service Bus-clientbibliotheek voor Java (nieuwste versie)
- Voorbeelden van Azure Service Bus-clientbibliotheek voor Python
- Voorbeelden van Azure Service Bus-clientbibliotheek voor JavaScript
- Voorbeelden van Azure Service Bus-clientbibliotheek voor TypeScript