0

Juste une question sur les abonnements aux rubriques Azure Service Bus, est-il possible d'assigner plusieurs propriétés à un même abonnement?Azure service bus Abonnement à un sujet, capable d'avoir plusieurs propriétés sql-filter?

Est-il également possible d'activer des valeurs nulles pour l'une des propriétés? Ce que j'essaie de faire, c'est de pouvoir utiliser une fonction azur pour filtrer les messages sur un identifiant, selon qu'il existe ou non.

Je n'ai pas été en mesure de le faire uniquement par les messages de file d'attente, car je ne trouve pas un moyen d'insérer un type de métadonnées. Une autre solution à mon problème serait une souscription distincte de Sujet de bus de service où sa propriété peut accepter être réglée et passer à deux valeurs différentes, par lesquelles je peux filtrer.

La raison pour laquelle je veux faire ceci n'est pas de dupliquer toute une séquence d'actions, seulement pour insérer une sorte de fonctionnalité de filtrage dans l'action après le sujet du bus de service pour ainsi dire.

-------------------- ------------------- MISE À JOUR

Ok donc un peu de mise à jour, j'ai fait quelques progrès dans cette affaire. Une autre question liée à cette question est:

Quand j'ai envoyé un message Négocié à un abonnement sujet servicebus avec une propriété par exemple:

message.Properties [ « id »] = « 1 »;

Est-il possible d'accéder à cette valeur de la valeur des messages d'une certaine façon? Je sais que ce n'est probablement pas à utiliser de cette façon, mais cela ouvrirait une nouvelle porte pour moi.

+0

Pas tout à fait ... suite si vous demandez d'avoir plusieurs règles sur un abonnements - oui vous pouvez. Vous pouvez également créer des filtres SQL complexes. –

+0

@SeanFeldman J'ai fait quelques progrès dans cette affaire et j'ai une question de suivi, s'il vous plaît regardez la mise à jour, merci. – John

Répondre

0

Selon votre description, j'ai vérifié la bibliothèque client Service Bus pour C# et trouvé lors de la création de l'abonnement via NamespaceManager.CreateSubscription, nous ne pouvions passer un seul Filter ou un RuleDescription avec un seul filtre comme suit:

public SubscriptionDescription CreateSubscription(string topicPath, string name, Filter filter); 
public SubscriptionDescription CreateSubscription(string topicPath, string name, RuleDescription ruleDescription); 

Comme Sean Feldman l'a mentionné à propos de la création de filtres SQL complexes, j'ai créé mon application pour le tester. Vous pouvez me référer à mon test comme suit:

Exemple de message

var body = "Hello World"; 
var message1 = new BrokeredMessage(body); 
message1.Properties["From"] = "Ian Smith"; 
message1.Properties["MessageId"] = -1; 
message1.Label = null; 

var message2 = new BrokeredMessage("Second message"); 
message2.Properties["From"] = "Alan Smith"; 
message2.Label = "important"; 
message2.Properties["MessageId"] = 2; 

var message3 = new BrokeredMessage("Third message"); 
message3.Properties["From"] = "Kelly Smith"; 
message3.Label = "information"; 
message3.Properties["MessageId"] = 1; 

Créer abonnement avec filtre

var filter=new SqlFilter("(sys.Label='important' or sys.Label IS NOT NULL) or MessageId<0 or From LIKE '%Smith'"); 
namespaceManager.CreateSubscription(topicName, subName,filter); 

L'abonnement ci-dessus pourrait recevoir tous les trois messages. Pour plus de détails, vous pouvez vous référer au SQLFilter syntax.

MISE À JOUR:

Pour recevoir des messages, vous pouvez tirer parti Subscription​Client.​On​Message et se référer à l'extrait de code suivant:

//Processes a message in an event-driven message pump. 
client.OnMessage((receivedMessage)=>{ 
    Console.WriteLine(receivedMessage.Properties['id'].ToString()); 
    receivedMessage.Complete(); //manually mark the message as processed and deleted. 
},new OnMessageOptions(){ 
    AutoComplete=false, 
    MaxConcurrentCalls=5 
}); 
+0

J'ai fait quelques progrès dans cette affaire et j'ai une question de suivi, s'il vous plaît regardez la mise à jour, merci. – John

+0

Voulez-vous dire que vous voulez récupérer la propriété personnalisée de votre client, par ex. [Client d'abonnement sur le message] (https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.subscriptionclient.onmessage?view=azureservicebus-4.0.0#Microsoft_ServiceBus_Messaging_SubscriptionClient_OnMessage_System_Action_Microsoft_ServiceBus_Messaging_BrokeredMessage__) ou [Client de file d'attente sur le message] (https://docs.microsoft.com/en-us/dotnet/api/microsoft.servicebus.messaging.queueclient.onmessage?view=azureservicebus-4.0.0)? –

+0

Je ne suis pas sûr que je ai compris votre question, mais disons que j'envoie un message à l'abonnement de sujet avec la propriété "ID" = 1, par exemple. message.Properties ['id'] = "1"; Je veux être en mesure de récupérer la valeur "1" du message avec cette propriété que j'ai envoyé à l'abonnement à la rubrique. est-ce que j'ai un sens? : P @Bruce – John