Psaní kódu pro odesílání a příjem zpráv pomocí fronty

Dokončeno

Distribuované aplikace používají fronty Service Bus jako dočasná umístění úložiště pro zprávy, které čekají na doručení do cílové komponenty. Pokud chcete odesílat a přijímat zprávy prostřednictvím fronty, musíte napsat kód ve zdrojové i cílové komponentě.

Zvažte aplikaci Contoso Bicycles. Zákazník může objednávku zadat prostřednictvím webu nebo mobilní aplikace. Vzhledem k tomu, že weby a mobilní aplikace běží na zákaznických zařízeních, není nijak omezený počet objednávek najednou. Díky tomu, že mobilní aplikace a web uloží objednávky do fronty služby Service Bus, back-endová komponenta (webová aplikace) dokáže zpracovávat objednávky z této fronty vlastním tempem.

Aplikace Contoso Bicycles má ve skutečnosti několik kroků pro zpracování nové objednávky. Všechny kroky závisí na první autorizaci platby, takže se rozhodnete použít frontu. První úloha přijímající komponenty zpracovává platbu.

V mobilní aplikaci a na webu musí společnost Contoso napsat kód, který přidá zprávu do fronty. V back-endové webové aplikaci společnost Contoso napíše kód, který přebírá zprávy z fronty.

V této části se podíváte na proces a aspekty psaní kódu pro odesílání a příjem zpráv pomocí fronty služby Service Bus.

Balíček NuGet Azure.Messaging.ServiceBus

Aby bylo možné snadno psát kód, který odesílá a přijímá zprávy prostřednictvím služby Service Bus, poskytuje Microsoft knihovnu tříd .NET. K interakci s frontou nebo tématem služby Service Bus můžete použít v libovolném jazyce .NET. Tuto knihovnu můžete do své aplikace zahrnout přidáním balíčku NuGet Azure.Messaging.ServiceBus .

Připojovací řetězce a klíče

Pro připojení k frontě v oboru názvů služby Service Bus potřebují zdrojové i cílové komponenty dva údaje:

  • Umístění oboru názvů služby Service Bus, označované také jako koncový bod: Umístění se zadává jako plně kvalifikovaný název domény v rámci servicebus.windows.net domény. Příklad: bicycleService.servicebus.windows.net.
  • Přístupový klíč: Service Bus omezuje přístup k frontám nebo tématům tím, že vyžaduje platný přístupový klíč.

Oba tyto informace jsou poskytovány objektu ServiceBusClient ve formě připojovací řetězec. Správné připojovací řetězec pro váš obor názvů můžete získat z webu Azure Portal.

Asynchronní volání metod

Fronta v Azure může být vzdálená tisíce kilometrů od odesílání a přijímání komponent. I když je fyzicky blízko, pomalé připojení a kolize šířky pásma můžou způsobit zpoždění, když komponenta volá metodu ve frontě. Z tohoto důvodu zpřístupňuje async klientská knihovna Service Bus metody pro interakci s frontami. Pomocí těchto metod zabráníte zablokování vlákna při čekání na dokončení volání.

Když odešlete zprávu do fronty, například použijte metodu SendMessageAsync s klíčovým slovem await .

Odeslání zprávy do fronty

Pokud chcete odeslat zprávu do fronty, 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á frontu služby Service Bus.

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

Dále vytvořte nový ServiceBusClient objekt a předejte ho připojovací řetězec a název fronty.

// Create a ServiceBusClient object using the connection string to the namespace.
await using var client = new ServiceBusClient(connectionString);
    
// Create a ServiceBusSender object by invoking the CreateSender method on the ServiceBusClient object, and specifying the queue name. 
ServiceBusSender sender = client.CreateSender(queueName);

Zprávu můžete odeslat do fronty voláním ServiceBusSender.SendMessageAsync() metody a předáním ServiceBusMessage.

// Create a new message to send to the queue.
string messageContent = "Order new crankshaft for eBike.";
var message = new ServiceBusMessage(messageContent);

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

Příjem zpráv z fronty

Chcete-li přijímat zprávy, musíte nejprve zaregistrovat obslužnou rutinu zprávy. Obslužná rutina zprávy je metoda v kódu, která se vyvolá, když je zpráva k dispozici ve frontě.

// Create a ServiceBusProcessor for the queue.
await using ServiceBusProcessor processor = client.CreateProcessor(queueName, options);
    
// Specify handler methods for messages and errors.
processor.ProcessMessageAsync += MessageHandler;
processor.ProcessErrorAsync += ErrorHandler;

Proveďte zpracování. Potom v rámci obslužné rutiny zprávy zavolejte metodu ProcessMessageEventArgs.CompleteMessageAsync() , která odebere zprávu z fronty.

await args.CompleteMessageAsync(args.Message);