Psaní kódu pro odesílání a přijímání zpráv pomocí tématu

Dokončeno

V distribuované aplikaci je potřeba některé zprávy odeslat jediné komponentě příjemce. Další zprávy budou muset dorazit do více než jednoho cíle.

Zvažte, co se stane, když uživatel zruší objednávku jízdních kol. Zrušení objednávky se trochu liší od umístění počáteční objednávky. Po zadání objednávky pracovní postup čekal před odesláním objednávky do místní výkladní skříně až do vymazání objednávky. U operace zrušení oznámíte výkladní skříň a zpracovatele plateb současně. Tento přístup minimalizuje riziko plýtvání časem řidiče doručení.

Pokud chcete povolit, aby stejnou zprávu obdrželo více komponent, použijete téma služby Azure Service Bus. V dalším kroku se podíváte na proces a aspekty psaní kódu.

Kód s tématy a kód s frontami

Pokud chcete, aby se všechny zprávy odesílané doručily všem součástem odběru, použijte témata. Psaní kódu, který využívá témata, je jedním ze způsobů, jak nahradit fronty. Použijete stejný balíček NuGet Azure.Messaging.ServiceBus, nakonfigurujete připojovací řetězec a použijete asynchronní programovací vzory.

Použijete také stejnou ServiceBusClient třídu a ServiceBusSender třídy k odesílání zpráv a ServiceBusProcessor třídy pro příjem zpráv.

Nastavení filtrů u předplatných

Pokud chcete, aby se určité zprávy odesílané do tématu doručily do konkrétního předplatného, můžete do tématu umístit jeden nebo více filtrů. Například v aplikaci pro jízdní kola běží vaše výkladní skříně Univerzální platforma Windows aplikací pro UPW.< a1/>. Každý obchod se může přihlásit k odběru OrderCancellation tématu a filtrovat si vlastní StoreId. Šetříte šířku pásma internetu, protože neodesíláte nepotřebné zprávy do více umístění úložiště. Mezitím se komponenta pro zpracování plateb přihlásí k odběru všech OrderCancellation zpráv.

Filtry můžou být jednoho ze tří typů:

  • Logické filtry: Zajišťuje TrueFilter , aby se všechny zprávy odeslané do tématu doručily do aktuálního předplatného. FalseFilter zajistí, že se žádné zprávy nedoručí do aktuálního odběru. (Ve skutečnosti se tím zablokuje nebo vypne odběr.)
  • Filtry SQL: Filtr SQL určuje podmínku pomocí stejné syntaxe jako WHERE klauzule v dotazu SQL. Odběratelům se doručí jenom zprávy, které se vrátí True , když budou vyhodnoceny proti tomuto filtru.
  • Filtry korelace: Filtr korelace obsahuje sadu podmínek, které se shodují s vlastnostmi každé zprávy. Pokud vlastnost ve filtru a vlastnosti zprávy mají stejnou hodnotu, považuje se za shodu.

StoreId Pro filtr můžete použít filtr SQL. Filtry SQL jsou nejflexibilnější, ale jsou také výpočetně nákladné a filtr může zpomalit propustnost služby Service Bus. V tomto případě zvolíte filtr korelace.

Odeslání zprávy do tématu

Pokud chcete odeslat zprávu do tématu, proveďte následující kroky.

V jakékoli odesílající nebo přijímající komponentě přidejte následující using příkazy do libovolného souboru kódu, který volá téma služby Service Bus.

using System.Threading;
using System.Threading.Tasks;
using Azure.Messaging.ServiceBus;

Pokud chcete odeslat zprávu, začněte vytvořením nového ServiceBusClient objektu a předáním připojovací řetězec a názvu tématu.

await using var client = new ServiceBusClient(connectionString);

Pak vytvořte ServiceBusSender objekt vyvoláním CreateSender metody objektu ServiceBusClient a zadáním názvu tématu.

ServiceBusSender sender = client.CreateSender(topicName);

Do tématu můžete odeslat zprávu voláním ServiceBusSender.SendMessageAsync() metody a předáním ServiceBusMessage. Stejně jako ve frontě musí být zpráva ve formě řetězce s kódováním UTF-8.

string message = "Cancel! I have changed my mind!";
var message = new ServiceBusMessage(message);

// Send the message to the topic.
await sender.SendMessageAsync(message);

Příjem zpráv z odběru

Pokud chcete dostávat zprávu z odběru, musíte vytvořit ServiceBusProcessor objekt a předat mu název tématu a název odběru.

processor = client.CreateProcessor(topicName, subscriptionName, options);

Pak zaregistrujte obslužnou rutinu zprávy a obslužnou rutinu chyby.

// Specify the handler method for messages.
processor.ProcessMessageAsync += MessageHandler;

// Specify the handler method for errors.
processor.ProcessErrorAsync += ErrorHandler;

Proveďte zpracování v obslužné rutině zprávy a potom zavolejte ProcessMessageEventArgs.CompleteMessageAsync() metodu, která odebere zprávu z odběru.

// Complete the message. The message is deleted from the subscription. 
await args.CompleteMessageAsync(args.Message);