Pisanie kodu służącego do wysyłania i odbierania komunikatów przy użyciu kolejki

Ukończone

Aplikacje rozproszone używają kolejek usługi Service Bus jako tymczasowych lokalizacji przechowywania komunikatów oczekujących na dostarczenie do składnika docelowego. Aby wysyłać i odbierać komunikaty za pośrednictwem kolejki, należy napisać kod zarówno w składnikach źródłowych, jak i docelowych.

Rozważmy aplikację Contoso Bicycles. Klient może złożyć zamówienie za pośrednictwem witryny internetowej lub aplikacji mobilnej. Ze względu na to, że witryny internetowe i aplikacje mobilne działają na urządzeniach klientów, w tym samym czasie nie ma limitu liczby zamówień. Dzięki zdeponowania zamówień w kolejce usługi Service Bus przez aplikację mobilną i witrynę internetową składnik zaplecza (aplikacja internetowa) może przetwarzać zamówienia z tej kolejki we własnym tempie.

Aplikacja Contoso Bicycles ma kilka kroków do obsługi nowego zamówienia. Wszystkie kroki zależą od pierwszego autoryzowania płatności, dlatego decydujesz się na użycie kolejki. Pierwsze zadanie składnika odbierającego przetwarza płatność.

W aplikacji mobilnej i witrynie internetowej firmy Contoso musi być wpisany kod, który dodaje komunikat do kolejki. W aplikacji internetowej zaplecza firma Contoso pisze kod, który pobiera komunikaty z kolejki.

W tym miejscu zapoznasz się z procesem i zagadnieniami dotyczącymi pisania kodu do wysyłania i odbierania komunikatów przy użyciu kolejki usługi Service Bus.

Pakiet NuGet Azure.Messaging.ServiceBus

Aby ułatwić pisanie kodu, który wysyła i odbiera komunikaty za pośrednictwem usługi Service Bus, firma Microsoft udostępnia bibliotekę klas platformy .NET. Do interakcji z kolejką lub tematem usługi Service Bus można użyć dowolnego języka platformy .NET. Tę bibliotekę można dołączyć do aplikacji, dodając pakiet NuGet Azure.Messaging.ServiceBus .

Parametry połączeń i klucze

Zarówno składniki źródłowe, jak i docelowe wymagają dwóch typów danych w celu połączenia się z kolejką w przestrzeni nazw usługi Service Bus:

  • Lokalizacja przestrzeni nazw usługi Service Bus, znana również jako punkt końcowy: lokalizacja jest określana jako w pełni kwalifikowana nazwa domeny w domenie servicebus.windows.net . Na przykład: bicycleService.servicebus.windows.net.
  • Klucz dostępu: usługa Service Bus ogranicza dostęp do kolejek lub tematów przez wymaganie prawidłowego klucza dostępu.

Oba te informacje są dostarczane do obiektu ServiceBusClient w postaci parametry połączenia. Możesz uzyskać poprawne parametry połączenia dla przestrzeni nazw w witrynie Azure Portal.

Asynchroniczne wywoływanie metod

Kolejka na platformie Azure może znajdować się tysiące kilometrów od wysyłania i odbierania składników. Nawet jeśli jest fizycznie blisko, wolne połączenia i rywalizacja o przepustowość mogą powodować opóźnienia, gdy składnik wywołuje metodę w kolejce. Z tego powodu biblioteka kliencka usługi Service Bus udostępnia async metody interakcji z kolejkami. Dzięki tym metodom można uniknąć blokowania wątku podczas oczekiwania na zakończenie wywołań.

Na przykład podczas wysyłania komunikatu do kolejki użyj metody SendMessageAsync ze await słowem kluczowym .

Aby wysłać komunikat do kolejki

Aby wysłać komunikat do kolejki, wykonaj następujące kroki.

W każdym składniku wysyłającym lub odbieranym dodaj następujące using instrukcje do dowolnego pliku kodu, który wywołuje kolejkę usługi Service Bus.

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

Następnie utwórz nowy ServiceBusClient obiekt i przekaż go parametry połączenia i nazwę kolejki.

// 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);

Komunikat można wysłać do kolejki, wywołując ServiceBusSender.SendMessageAsync() metodę i przekazując element 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);

Aby odbierać komunikaty z kolejki

Aby odbierać komunikaty, należy najpierw zarejestrować procedurę obsługi komunikatów. Procedura obsługi komunikatów jest metodą w kodzie wywoływanym, gdy komunikat jest dostępny w kolejce.

// 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;

Wykonaj procedurę przetwarzania. Następnie w ramach procedury obsługi komunikatów wywołaj metodę ProcessMessageEventArgs.CompleteMessageAsync() , aby usunąć komunikat z kolejki.

await args.CompleteMessageAsync(args.Message);