Udostępnij za pośrednictwem


Rozpoczynanie pracy z tematami i subskrypcjami usługi Azure Service Bus (.NET)

W tym przewodniku Szybki start pokazano, jak wysyłać komunikaty do tematu usługi Service Bus i odbierać komunikaty z subskrypcji do tego tematu przy użyciu biblioteki azure.Messaging.ServiceBus platformy .NET.

W tym przewodniku Szybki start wykonasz następujące czynności:

  1. Utworzenie przestrzeni nazw usługi Service Bus za pomocą usługi Azure Portal.
  2. Utworzenie tematu usługi Service Bus przy użyciu witryny Azure Portal.
  3. Utworzenie subskrypcji tego tematu usługi Service Bus przy użyciu witryny Azure Portal.
  4. Napisz aplikację konsolową platformy .NET, aby wysłać zestaw komunikatów do tematu.
  5. Napisz aplikację konsolową platformy .NET, aby otrzymywać te komunikaty z subskrypcji.

Uwaga

Ten przewodnik Szybki start zawiera instrukcje krok po kroku dotyczące implementowania prostego scenariusza wysyłania partii komunikatów do tematu usługi Service Bus i odbierania tych komunikatów z subskrypcji tematu. Aby uzyskać więcej przykładów dotyczących innych i zaawansowanych scenariuszy, zobacz Przykłady dla platformy .NET usługi Service Bus w witrynie GitHub.

  • W tym przewodniku Szybki start przedstawiono dwa sposoby nawiązywania połączenia z usługą Azure Service Bus: parametry połączenia i bez hasła. Pierwsza opcja pokazuje, jak używać parametry połączenia do nawiązywania połączenia z przestrzenią nazw usługi Service Bus. Druga opcja pokazuje, jak używać podmiotu zabezpieczeń w usłudze Microsoft Entra ID i kontroli dostępu opartej na rolach (RBAC) w celu nawiązania połączenia z przestrzenią nazw usługi Service Bus. Nie musisz martwić się o zakodowanie parametry połączenia w kodzie lub w pliku konfiguracji lub w bezpiecznym magazynie, na przykład w usłudze Azure Key Vault. Jeśli dopiero zaczynasz korzystać z platformy Azure, możesz znaleźć opcję parametry połączenia łatwiejszą do naśladowania. Zalecamy użycie opcji bez hasła w rzeczywistych aplikacjach i środowiskach produkcyjnych. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie i autoryzacja.

Wymagania wstępne

Jeśli dopiero zaczynasz korzystać z usługi, zobacz Omówienie usługi Service Bus przed wykonaniem tego przewodnika Szybki start.

  • Subskrypcja platformy Azure. Do korzystania z usług platformy Azure, w tym usługi Azure Service Bus, potrzebna jest subskrypcja. Jeśli nie masz istniejącego konta platformy Azure, możesz utworzyć konto bezpłatnej wersji próbnej.
  • Visual Studio 2022. Przykładowa aplikacja korzysta z nowych funkcji, które zostały wprowadzone w języku C# 10. Nadal można używać biblioteki klienta usługi Service Bus z poprzednimi wersjami języka C#, ale składnia może się różnić. Aby użyć najnowszej składni, zalecamy zainstalowanie programu .NET 6.0 lub nowszego i ustawienie wersji językowej na latest. Jeśli używasz programu Visual Studio, wersje przed programem Visual Studio 2022 nie są zgodne z narzędziami wymaganymi do kompilowania projektów języka C# 10.

Tworzenie przestrzeni nazw w witrynie Azure Portal

Aby rozpocząć korzystanie z obsługi wiadomości usługi Service Bus na platformie Azure, musisz najpierw utworzyć przestrzeń nazw o nazwie, która jest unikatowa w obrębie platformy Azure. Przestrzeń nazw udostępnia kontener określania zakresu dla zasobów usługi Service Bus (kolejek, tematów itp.) w aplikacji.

Aby utworzyć przestrzeń nazw:

  1. Zaloguj się w witrynie Azure Portal.

  2. Przejdź do strony Wszystkie usługi.

  3. Na lewym pasku nawigacyjnym wybierz pozycję Integracja z listy kategorii, umieść wskaźnik myszy na usłudze Service Bus, a następnie wybierz + przycisk na kafelku usługi Service Bus.

    Obraz przedstawiający wybór opcji Utwórz zasób, integrację, a następnie usługę Service Bus w menu.

  4. W tagu Podstawowe na stronie Tworzenie przestrzeni nazw wykonaj następujące kroki:

    1. W polu Subskrypcja wybierz subskrypcję platformy Azure, w której ma zostać utworzona przestrzeń nazw.

    2. W obszarze Grupa zasobów wybierz istniejącą grupę zasobów lub utwórz nową.

    3. Wprowadź nazwę przestrzeni nazw. Nazwa przestrzeni nazw powinna być zgodna z następującymi konwencjami nazewnictwa:

      • Nazwa musi być unikatowa na platformie Azure. System od razu sprawdza, czy nazwa jest dostępna.
      • Długość nazwy wynosi co najmniej 6 i co najwyżej 50 znaków.
      • Nazwa może zawierać tylko litery, cyfry, łączniki -.
      • Nazwa musi zaczynać się literą i kończyć literą lub cyfrą.
      • Nazwa nie kończy się ciągiem -sb lub -mgmt.
    4. W polu Lokalizacja wybierz region, w którym powinna być hostowana przestrzeń nazw.

    5. W obszarze Warstwa cenowa wybierz warstwę cenową (Podstawowa, Standardowa lub Premium) dla przestrzeni nazw. W tym przewodniku Szybki start wybierz pozycję Standardowa.

    6. Jeśli wybierzesz warstwę Premium , wybierz, czy możesz włączyć replikację geograficzną dla przestrzeni nazw. Funkcja replikacji geograficznej zapewnia, że metadane i dane przestrzeni nazw są stale replikowane z regionu podstawowego do co najmniej jednego regionu pomocniczego.

      Ważne

      Jeśli chcesz korzystać z tematów i subskrypcji, wybierz warstwę Standardowa lub Premium. Tematy/subskrypcje nie są obsługiwane w warstwie cenowej Podstawowa.

      W przypadku wybrania warstwy cenowej Premium określ liczbę jednostek obsługi komunikatów. Warstwa Premium zapewnia izolację zasobów na poziomie procesora i pamięci, dlatego poszczególne obciążenia są od siebie odizolowane. Ten kontener zasobów jest nazywany jednostką obsługi komunikatów. Przestrzeń nazw w warstwie Premium ma co najmniej jedną jednostkę obsługi komunikatów. Możesz wybrać 1, 2, 4, 8 lub 16 jednostek obsługi komunikatów dla każdej przestrzeni nazw usługi Service Bus Premium. Aby uzyskać więcej informacji, zobacz Obsługa komunikatów w usłudze Service Bus w warstwie Premium.

    7. Wybierz pozycję Przejrzyj i utwórz w dolnej części strony.

      Obraz przedstawiający stronę Tworzenie przestrzeni nazw

    8. Na stronie Przeglądanie + tworzenie przejrzyj ustawienia i wybierz pozycję Utwórz.

  5. Po pomyślnym wdrożeniu zasobu wybierz pozycję Przejdź do zasobu na stronie wdrożenia.

    Obraz przedstawiający stronę pomyślnego wdrożenia z linkiem Przejdź do zasobu.

  6. Zostanie wyświetlona strona główna dla przestrzeni nazw usługi Service Bus.

    Obraz przedstawiający stronę główną utworzonej przestrzeni nazw usługi Service Bus.

Tworzenie tematu przy użyciu witryny Azure Portal

  1. Na stronie Przestrzeń nazw usługi Service Bus rozwiń węzeł Jednostki w menu nawigacji po lewej stronie, a następnie wybierz pozycję Tematy w menu po lewej stronie.

  2. Wybierz pozycję + Temat na pasku narzędzi.

  3. Wprowadź nazwę tematu. Pozostaw inne opcje z wartościami domyślnymi.

  4. Wybierz pozycję Utwórz.

    Obraz przedstawiający stronę Tworzenie tematu.

Tworzenie subskrypcji tematu

  1. Wybierz temat utworzony w poprzedniej sekcji.

    Obraz przedstawiający wybór tematu z listy tematów.

  2. Na stronie Temat usługi Service Bus wybierz pozycję + Subskrypcja na pasku narzędzi.

    Obraz przedstawiający przycisk Dodaj subskrypcję.

  3. Na stronie Tworzenie subskrypcji wykonaj następujące kroki:

    1. Wprowadź S1 jako nazwę subskrypcji.

    2. Wprowadź wartość 3 w polu Maksymalna liczba dostaw.

    3. Następnie wybierz pozycję Utwórz , aby utworzyć subskrypcję.

      Obraz przedstawiający stronę Tworzenie subskrypcji.

Uwierzytelnianie aplikacji na platformie Azure

W tym przewodniku Szybki start przedstawiono dwa sposoby nawiązywania połączenia z usługą Azure Service Bus: bez hasła i parametry połączenia.

Pierwsza opcja pokazuje, jak używać podmiotu zabezpieczeń w usłudze Microsoft Entra ID i kontroli dostępu opartej na rolach (RBAC) w celu nawiązania połączenia z przestrzenią nazw usługi Service Bus. Nie musisz martwić się o zakodowane parametry połączenia w kodzie lub w pliku konfiguracji lub w bezpiecznym magazynie, na przykład Azure Key Vault.

Druga opcja pokazuje, jak używać parametry połączenia do nawiązywania połączenia z przestrzenią nazw usługi Service Bus. Jeśli dopiero zaczynasz korzystać z platformy Azure, możesz znaleźć opcję parametry połączenia łatwiejszą do naśladowania. Zalecamy użycie opcji bez hasła w rzeczywistych aplikacjach i środowiskach produkcyjnych. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie i autoryzacja. Więcej informacji na temat uwierzytelniania bez hasła można również uzyskać na stronie przeglądu.

Przypisywanie ról do użytkownika firmy Microsoft Entra

Podczas tworzenia aplikacji lokalnie upewnij się, że konto użytkownika, które nawiązuje połączenie z usługą Azure Service Bus, ma odpowiednie uprawnienia. Aby wysyłać i odbierać komunikaty, musisz mieć rolę Właściciela danych usługi Azure Service Bus. Aby przypisać sobie tę rolę, musisz mieć rolę Administratora dostępu użytkowników lub inną rolę obejmującą Microsoft.Authorization/roleAssignments/write akcję. Role RBAC platformy Azure można przypisać użytkownikowi przy użyciu witryny Azure Portal, interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell. Dowiedz się więcej o dostępnych zakresach przypisań ról na stronie przeglądu zakresu.

Poniższy przykład przypisuje Azure Service Bus Data Owner rolę do konta użytkownika, co zapewnia pełny dostęp do zasobów usługi Azure Service Bus. W rzeczywistym scenariuszu postępuj zgodnie z zasadą najniższych uprawnień , aby dać użytkownikom tylko minimalne uprawnienia wymagane do bezpieczniejszego środowiska produkcyjnego.

Wbudowane role platformy Azure dla usługi Azure Service Bus

W przypadku usługi Azure Service Bus zarządzanie przestrzeniami nazw i wszystkimi powiązanymi zasobami za pośrednictwem witryny Azure Portal i interfejsu API zarządzania zasobami platformy Azure jest już chronione przy użyciu modelu RBAC platformy Azure. Platforma Azure udostępnia poniższe wbudowane role platformy Azure umożliwiające autoryzowanie dostępu do przestrzeni nazw usługi Service Bus:

  • Właściciel danych usługi Azure Service Bus: umożliwia dostęp danych do przestrzeni nazw usługi Service Bus i jej jednostek (kolejek, tematów, subskrypcji i filtrów). Członek tej roli może wysyłać i odbierać komunikaty z kolejek lub tematów/subskrypcji.
  • Nadawca danych usługi Azure Service Bus: użyj tej roli, aby udzielić dostępu do przestrzeni nazw usługi Service Bus i jej jednostek.
  • Odbiornik danych usługi Azure Service Bus: ta rola umożliwia uzyskiwanie dostępu do przestrzeni nazw usługi Service Bus i jej jednostek.

Jeśli chcesz utworzyć rolę niestandardową, zobacz Prawa wymagane dla operacji usługi Service Bus.

Dodawanie użytkownika usługi Microsoft Entra do roli właściciela usługi Azure Service Bus

Dodaj nazwę użytkownika usługi Microsoft Entra do roli właściciela danych usługi Azure Service Bus na poziomie przestrzeni nazw usługi Service Bus. Umożliwi to aplikacji działającej w kontekście konta użytkownika wysyłanie komunikatów do kolejki lub tematu oraz odbieranie komunikatów z kolejki lub subskrypcji tematu.

Ważne

W większości przypadków propagacja przypisania roli na platformie Azure potrwa minutę lub dwie. W rzadkich przypadkach może upłynąć do ośmiu minut. Jeśli podczas pierwszego uruchomienia kodu wystąpią błędy uwierzytelniania, zaczekaj chwilę i spróbuj ponownie.

  1. Jeśli nie masz otwartej strony przestrzeni nazw usługi Service Bus w witrynie Azure Portal, znajdź przestrzeń nazw usługi Service Bus przy użyciu głównego paska wyszukiwania lub nawigacji po lewej stronie.

  2. Na stronie przeglądu wybierz pozycję Kontrola dostępu (Zarządzanie dostępem i tożsamościami) z menu po lewej stronie.

  3. Na stronie Kontrola dostępu (Zarządzanie dostępem i tożsamościami) wybierz kartę Przypisania ról.

  4. Wybierz pozycję + Dodaj z górnego menu, a następnie pozycję Dodaj przypisanie roli z wyświetlonego menu rozwijanego.

    Zrzut ekranu przedstawiający sposób przypisywania roli.

  5. Użyj pola wyszukiwania, aby filtrować wyniki do żądanej roli. W tym przykładzie wyszukaj Azure Service Bus Data Owner i wybierz pasujący wynik. Następnie wybierz pozycję Dalej.

  6. W obszarze Przypisz dostęp do wybierz pozycję Użytkownik, grupa lub jednostka usługi, a następnie wybierz pozycję + Wybierz członków.

  7. W oknie dialogowym wyszukaj nazwę użytkownika firmy Microsoft Entra (zazwyczaj adres e-mail user@domain ), a następnie wybierz pozycję Wybierz w dolnej części okna dialogowego.

  8. Wybierz pozycję Przejrzyj i przypisz , aby przejść do ostatniej strony, a następnie ponownie przejrzyj i przypisz, aby ukończyć proces.

Uruchamianie programu Visual Studio i logowanie do platformy Azure

Dostęp do przestrzeni nazw usługi Service Bus można autoryzować, wykonując następujące czynności:

  1. Uruchom program Visual Studio. Jeśli zostanie wyświetlone okno Wprowadzenie , wybierz link Kontynuuj bez kodu w okienku po prawej stronie.

  2. Wybierz przycisk Zaloguj się w prawym górnym rogu programu Visual Studio.

    Zrzut ekranu przedstawiający przycisk logowania się do platformy Azure przy użyciu programu Visual Studio.

  3. Zaloguj się przy użyciu konta Microsoft Entra, do którego przypisano wcześniej rolę.

    Zrzut ekranu przedstawiający wybór konta.

Wysyłanie komunikatów do tematu

W tej sekcji pokazano, jak utworzyć aplikację konsolową platformy .NET w celu wysyłania komunikatów do tematu usługi Service Bus.

Uwaga

Ten przewodnik Szybki start zawiera instrukcje krok po kroku dotyczące implementowania prostego scenariusza wysyłania partii komunikatów do tematu usługi Service Bus i odbierania tych komunikatów z subskrypcji tematu. Aby uzyskać więcej przykładów dotyczących innych i zaawansowanych scenariuszy, zobacz Przykłady dla platformy .NET usługi Service Bus w witrynie GitHub.

Tworzenie aplikacji konsolowej

  1. W programie Visual Studio wybierz pozycję Plik ->Nowy ->Projekt menu.
  2. W oknie dialogowym Tworzenie nowego projektu wykonaj następujące kroki: Jeśli to okno dialogowe nie jest widoczne, wybierz pozycję Plik w menu, wybierz pozycję Nowy, a następnie wybierz pozycję Projekt.
    1. Wybierz język C# dla języka programowania.

    2. Wybierz pozycję Konsola dla typu aplikacji.

    3. Wybierz pozycję Aplikacja konsolowa z listy wyników.

    4. Następnie wybierz Dalej.

      Obraz przedstawiający okno dialogowe Tworzenie nowego projektu z wybraną pozycją C# i konsolą

  3. Wprowadź ciąg TopicSender jako nazwę projektu, ServiceBusTopicQuickStart jako nazwę rozwiązania, a następnie wybierz pozycję Dalej.
  4. Na stronie Dodatkowe informacje wybierz pozycję Utwórz, aby utworzyć rozwiązanie i projekt.

Dodawanie pakietów NuGet do projektu

  1. Wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola z menu.

  2. Uruchom następujące polecenie, aby zainstalować pakiet NuGet Azure.Messaging.ServiceBus .

    Install-Package Azure.Messaging.ServiceBus
    
  3. Uruchom następujące polecenie, aby zainstalować pakiet NuGet Azure.Identity .

    Install-Package Azure.Identity
    

Dodawanie kodu do wysyłania komunikatów do tematu

  1. Zastąp zawartość pliku Program.cs poniższym kodem. Ważne kroki zostały opisane w tej sekcji z dodatkowymi informacjami w komentarzach kodu.

    1. Tworzy obiekt ServiceBusClient przy użyciu DefaultAzureCredential obiektu . DefaultAzureCredential program automatycznie odnajduje poświadczenia logowania programu Visual Studio i używa ich do uwierzytelniania w usłudze Azure Service Bus.
    2. Wywołuje metodę CreateSender obiektu ServiceBusClient w celu utworzenia obiektu ServiceBusSender dla określonego tematu usługi Service Bus.
    3. Tworzy obiekt ServiceBusMessageBatch przy użyciu klasy ServiceBusSender.CreateMessageBatchAsync.
    4. Dodaj komunikaty do partii przy użyciu elementu ServiceBusMessageBatch.TryAddMessage.
    5. Wysyła partię komunikatów do tematu usługi Service Bus przy użyciu metody ServiceBusSender.SendMessagesAsync .

    Ważne

    Zaktualizuj wartości symboli zastępczych (<NAMESPACE-NAME> i <TOPIC-NAME>) we fragmencie kodu przy użyciu nazw przestrzeni nazw i tematu usługi Service Bus.

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the sender used to publish messages to the topic
    ServiceBusSender sender;
    
    // number of messages to be sent to the topic
    const int numOfMessages = 3;
    
    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    
    //TODO: Replace the "<NAMESPACE-NAME>" and "<TOPIC-NAME>" placeholders.
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    sender = client.CreateSender("<TOPIC-NAME>");
    
    // create a batch 
    using ServiceBusMessageBatch messageBatch = await sender.CreateMessageBatchAsync();
    
    for (int i = 1; i <= numOfMessages; i++)
    {
        // try adding a message to the batch
        if (!messageBatch.TryAddMessage(new ServiceBusMessage($"Message {i}")))
        {
            // if it is too large for the batch
            throw new Exception($"The message {i} is too large to fit in the batch.");
        }
    }
    
    try
    {
        // Use the producer client to send the batch of messages to the Service Bus topic
        await sender.SendMessagesAsync(messageBatch);
        Console.WriteLine($"A batch of {numOfMessages} messages has been published to the topic.");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await sender.DisposeAsync();
        await client.DisposeAsync();
    }
    
    Console.WriteLine("Press any key to end the application");
    Console.ReadKey();
    
  2. Skompiluj projekt i upewnij się, że nie ma żadnych błędów.

  3. Uruchom program i poczekaj na komunikat potwierdzenia.

    A batch of 3 messages has been published to the topic
    

    Ważne

    W większości przypadków propagacja przypisania roli na platformie Azure potrwa minutę lub dwie. W rzadkich przypadkach może upłynąć do ośmiu minut. Jeśli podczas pierwszego uruchomienia kodu wystąpią błędy uwierzytelniania, zaczekaj chwilę i spróbuj ponownie.

  4. W witrynie Azure Portal wykonaj następujące kroki:

    1. Przejdź do przestrzeni nazw usługi Service Bus.

    2. Na stronie Przegląd w środkowym dolnym okienku przejdź do karty Tematy i wybierz temat usługi Service Bus. W poniższym przykładzie jest to mytopic.

      Wybieranie tematu

    3. Na stronie Temat usługi Service Bus na wykresie Komunikaty w dolnej sekcji Metryki widać, że w temacie znajdują się trzy komunikaty przychodzące. Jeśli nie widzisz wartości, poczekaj kilka minut i odśwież stronę, aby wyświetlić zaktualizowany wykres.

      Komunikaty wysyłane do tematu

    4. Wybierz subskrypcję w dolnym okienku. W poniższym przykładzie jest to S1. Na stronie Subskrypcja usługi Service Bus zostanie wyświetlona liczba aktywnych komunikatów jako 3. Subskrypcja otrzymała trzy komunikaty, które zostały wysłane do tematu, ale żaden odbiorca nie wybrał ich jeszcze.

      Komunikaty odebrane w subskrypcji

Odbieranie komunikatów z subskrypcji

W tej sekcji utworzysz aplikację konsolową platformy .NET, która odbiera komunikaty z subskrypcji do tematu usługi Service Bus.

Uwaga

Ten przewodnik Szybki start zawiera instrukcje krok po kroku dotyczące implementowania prostego scenariusza wysyłania partii komunikatów do tematu usługi Service Bus i odbierania tych komunikatów z subskrypcji tematu. Aby uzyskać więcej przykładów dotyczących innych i zaawansowanych scenariuszy, zobacz Przykłady dla platformy .NET usługi Service Bus w witrynie GitHub.

Tworzenie projektu dla odbiorcy

  1. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie ServiceBusTopicQuickStart, wskaż polecenie Dodaj i wybierz pozycję Nowy projekt.
  2. Wybierz pozycję Aplikacja konsolowa, a następnie wybierz pozycję Dalej.
  3. Wprowadź wartość SubscriptionReceiver jako nazwę projektu, a następnie wybierz pozycję Dalej.
  4. Na stronie Dodatkowe informacje wybierz pozycję Utwórz.
  5. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję SubskrypcjaRekeiver i wybierz pozycję Ustaw jako projekt startowy.

Dodawanie pakietów NuGet do projektu

  1. Wybierz pozycję Narzędzia NuGet>Menedżer pakietów> Menedżer pakietów Konsola z menu.

  2. Wybierz pozycję SubskrypcjaReceiver dla listy rozwijanej Projekt domyślny .

  3. Uruchom następujące polecenie, aby zainstalować pakiet NuGet Azure.Messaging.ServiceBus .

    Install-Package Azure.Messaging.ServiceBus
    
  4. Uruchom następujące polecenie, aby zainstalować pakiet NuGet Azure.Identity .

    Install-Package Azure.Identity
    

Dodawanie kodu w celu odbierania komunikatów z subskrypcji

W tej sekcji dodasz kod umożliwiający pobranie komunikatów z subskrypcji.

  1. Zastąp istniejącą zawartość Program.cs wartości następującymi właściwościami i metodami:

    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the subscription
    ServiceBusProcessor processor;    
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
  2. Dołącz następujący kod na końcu .Program.cs

    Ważne

    Zaktualizuj wartości symboli zastępczych (<NAMESPACE-NAME>, <TOPIC-NAME>, <SUBSCRIPTION-NAME>) we fragmencie kodu przy użyciu nazw przestrzeni nazw, tematu i subskrypcji usługi Service Bus.

    Aby uzyskać więcej informacji, zobacz komentarze kodu.

    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Create the clients that we'll use for sending and processing messages.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
  3. Oto jak powinien wyglądać twój Program.cs wygląd:

    using System;
    using System.Threading.Tasks;
    using Azure.Messaging.ServiceBus;
    using Azure.Identity;
    
    // the client that owns the connection and can be used to create senders and receivers
    ServiceBusClient client;
    
    // the processor that reads and processes messages from the subscription
    ServiceBusProcessor processor;
    
    // handle received messages
    async Task MessageHandler(ProcessMessageEventArgs args)
    {
        string body = args.Message.Body.ToString();
        Console.WriteLine($"Received: {body} from subscription.");
    
        // complete the message. messages is deleted from the subscription. 
        await args.CompleteMessageAsync(args.Message);
    }
    
    // handle any errors when receiving messages
    Task ErrorHandler(ProcessErrorEventArgs args)
    {
        Console.WriteLine(args.Exception.ToString());
        return Task.CompletedTask;
    }
    
    // The Service Bus client types are safe to cache and use as a singleton for the lifetime
    // of the application, which is best practice when messages are being published or read
    // regularly.
    //
    // Create the clients that we'll use for sending and processing messages.
    // TODO: Replace the <NAMESPACE-NAME> placeholder
    client = new ServiceBusClient(
        "<NAMESPACE-NAME>.servicebus.windows.net",
        new DefaultAzureCredential());
    
    // create a processor that we can use to process the messages
    // TODO: Replace the <TOPIC-NAME> and <SUBSCRIPTION-NAME> placeholders
    processor = client.CreateProcessor("<TOPIC-NAME>", "<SUBSCRIPTION-NAME>", new ServiceBusProcessorOptions());
    
    try
    {
        // add handler to process messages
        processor.ProcessMessageAsync += MessageHandler;
    
        // add handler to process any errors
        processor.ProcessErrorAsync += ErrorHandler;
    
        // start processing 
        await processor.StartProcessingAsync();
    
        Console.WriteLine("Wait for a minute and then press any key to end the processing");
        Console.ReadKey();
    
        // stop processing 
        Console.WriteLine("\nStopping the receiver...");
        await processor.StopProcessingAsync();
        Console.WriteLine("Stopped receiving messages");
    }
    finally
    {
        // Calling DisposeAsync on client types is required to ensure that network
        // resources and other unmanaged objects are properly cleaned up.
        await processor.DisposeAsync();
        await client.DisposeAsync();
    }
    
  4. Skompiluj projekt i upewnij się, że nie ma żadnych błędów.

  5. Uruchom aplikację odbiorcy. Powinny zostać wyświetlone odebrane komunikaty. Naciśnij dowolny, aby zatrzymać odbiornik i aplikację.

    Wait for a minute and then press any key to end the processing
    Received: Message 1 from subscription: S1
    Received: Message 2 from subscription: S1
    Received: Message 3 from subscription: S1
    
    Stopping the receiver...
    Stopped receiving messages
    
  6. Ponownie sprawdź portal.

    • Na stronie Temat usługi Service Bus na wykresie Komunikaty są widoczne trzy komunikaty przychodzące i trzy komunikaty wychodzące. Jeśli te liczby nie są widoczne, poczekaj kilka minut i odśwież stronę, aby wyświetlić zaktualizowany wykres.

      Wiadomości wysłane i odebrane

    • Na stronie Subskrypcja usługi Service Bus zobaczysz aktywną liczbę komunikatów jako zero. Jest to spowodowane tym, że odbiorca odebrał komunikaty z tej subskrypcji i zakończył komunikaty.

      Liczba aktywnych komunikatów w subskrypcji na końcu

Następne kroki

Zapoznaj się z następującą dokumentacją i przykładami: