Définir des filtres d’abonnement (Azure Service Bus)
Cet article fournit quelques exemples de définition de filtres sur les abonnements pour les rubriques Service Bus. Pour obtenir des informations conceptuelles sur les filtres, consultez Filtres.
Utiliser le portail Azure
Pour définir des filtres d’abonnement dans le portail Azure, utilisez la section Filtres de la page Abonnement Service Bus.
Utiliser l’interface de ligne de commande Microsoft Azure
Utilisez la méthode az servicebus topic subscription rule create
pour créer une règle ou filtrer sur un abonnement.
Utilisation d'Azure PowerShell
Utilisez la méthode Set-AzServiceBusRule
pour créer une règle ou filtrer sur un abonnement.
Remarque
Une règle d’abonnement se compose de filtres et d’actions. Vous pouvez spécifier des actions à l’aide de l’interface CLI et de PowerShell, mais pas à l’aide du portail Azure.
Filtrer sur les propriétés système
Pour faire référence à une propriété système dans un filtre, utilisez le format suivant : sys.<system-property-name>
.
sys.label LIKE '%bus%'
sys.messageid = 'xxxx'
sys.correlationid like 'abc-%'
Notes
- Pour obtenir la liste des propriétés système, consultez Messages, charges utiles et sérialisation.
- Utilisez des noms de propriétés système d’Azure.Messaging.ServiceBus.ServiceBusMessage dans vos filtres.
- Le
Subject
de Azure.Messaging.ServiceBus.ServiceBusMessage est mappé àLabel
dans le Microsoft.Azure.ServiceBus.Message déprécié.
Filtrer sur les propriétés de message
Voici les exemples d’utilisation des propriétés d’application ou d’utilisateur dans un filtre. Vous pouvez accéder aux propriétés d’application définies à l’aide d’Azure.Messaging.ServiceBus.ServiceBusMessage.ApplicationProperties) (le plus récent) ou des propriétés utilisateur définies par Microsoft.Azure.ServiceBus.ServiceBusMessage (déprécié) à l’aide de la syntaxe user.property-name
ou juste property-name
.
MessageProperty = 'A'
user.SuperHero like 'SuperMan%'
Le 30 septembre 2026, nous retirerons les bibliothèques WindowsAzure.ServiceBus, Microsoft.Azure.ServiceBus et com.microsoft.azure.servicebus du kit de développement logiciel (SDK) Azure Service Bus, qui ne sont pas conformes aux directives du kit de développement logiciel (SDK) Azure. Nous mettrons également fin à la prise en charge du protocole SBMP. Vous ne pourrez donc plus utiliser ce protocole après le 30 septembre 2026. Migrez vers les dernières bibliothèques du kit de développement logiciel (SDK) Azure, qui offre des correctifs de sécurité critiques et des fonctionnalités améliorées, avant cette date.
Bien que les anciennes bibliothèques puissent toujours être utilisées au-delà du 30 septembre 2026, elles ne seront plus prises en charge officiellement et mises à jour par Microsoft. Pour plus d’informations, consultez l’annonce concernant l’arrêt de la prise en charge.
Filtrer sur les propriétés de message avec des caractères spéciaux
Si le nom de la propriété de message contient des caractères spéciaux, utilisez des guillemets doubles ("
) pour encadrer le nom de la propriété. Par exemple, si le nom de la propriété est "http://schemas.microsoft.com/xrm/2011/Claims/EntityLogicalName"
, utilisez la syntaxe suivante dans le filtre.
"http://schemas.microsoft.com/xrm/2011/Claims/EntityLogicalName" = 'account'
Filtrer sur les propriétés de message avec des valeurs numériques
Les exemples suivants montrent comment utiliser des propriétés avec des valeurs numériques dans des filtres.
MessageProperty = 1
MessageProperty > 1
MessageProperty > 2.08
MessageProperty = 1 AND MessageProperty2 = 3
MessageProperty = 1 OR MessageProperty2 = 3
Filtres basés sur des paramètres
Voici quelques exemples d’utilisation de filtres basés sur des paramètres. Dans ces exemples, DataTimeMp
est une propriété de message de type DateTime
et @dtParam
est un paramètre transmis au filtre en tant qu’objet DateTime
.
DateTimeMp < @dtParam
DateTimeMp > @dtParam
(DateTimeMp2-DateTimeMp1) <= @timespan //@timespan is a parameter of type TimeSpan
DateTimeMp2-DateTimeMp1 <= @timespan
Utilisation des clauses IN et NOT IN
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')
Pour un exemple C#, consultez Exemple de filtres de rubrique sur GitHub.
Filtres de corrélation
Filtre de corrélation utilisant CorrelationID
new CorrelationFilter("Contoso");
Il filtre les messages avec CorrelationID
défini sur Contoso
.
Notes
La classe CorrelationRuleFilter dans .NET se trouve dans l’espace de noms Azure.Messaging.ServiceBus.Administration. Pour obtenir un exemple de code qui montre comment créer des filtres en général à l’aide de .NET, consultez ce code sur GitHub.
Filtre de corrélation utilisant les propriétés system et user
var filter = new CorrelationRuleFilter();
filter.Label = "Important";
filter.ReplyTo = "johndoe@contoso.com";
filter.Properties["color"] = "Red";
Il est équivalent à : sys.ReplyTo = 'johndoe@contoso.com' AND sys.Label = 'Important' AND color = 'Red'
Exemple .NET pour la création de filtres d’abonnement
Voici un exemple C# .NET qui crée les entités Service Bus suivantes :
- Rubrique Service Bus nommée
topicfiltersampletopic
- Abonnement à la rubrique nommé
AllOrders
avec un filtre de règle True, qui équivaut à un filtre de règle SQL avec l’expression1=1
. - Abonnement nommé
ColorBlueSize10Orders
avec une expression de filtre SQLcolor='blue' AND quantity=10
- Abonnement nommé
ColorRed
avec une expression de filtre SQLcolor='red'
et une action - Abonnement nommé
HighPriorityRedOrders
avec une expression de filtre de corrélationSubject = "red", CorrelationId = "high"
Pour plus d'informations, consultez les commentaires du code inline.
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());
}
}
}
}
Exemple .NET pour l’envoi de messages de réception
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;
}
}
}
Étapes suivantes
Consultez les exemples suivants :
Pour explorer les fonctionnalités d’Azure Service Bus, essayez les exemples dans le langage de votre choix.
- Exemples de bibliothèque de client Azure Service Bus pour .NET (dernière version)
- Exemples de bibliothèque de client Azure Service Bus pour Java (dernière version)
- Exemples de bibliothèque de client Azure Service Bus pour Python
- Exemples de bibliothèque de client Azure Service Bus pour JavaScript
- Exemples de bibliothèque de client Azure Service Bus pour TypeScript