Szybki start: wysyłanie i odbieranie komunikatów z tematu przestrzeni nazw usługi Azure Event Grid (.NET)

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

  1. Utwórz przestrzeń nazw usługi Event Grid przy użyciu witryny Azure Portal.
  2. Utwórz temat przestrzeni nazw usługi Event Grid przy użyciu witryny Azure Portal.
  3. Utwórz subskrypcję zdarzeń przy użyciu witryny Azure Portal.
  4. Pisanie aplikacji konsolowej .NET w celu wysyłania zestawu komunikatów do tematu
  5. Napisz aplikację konsolową platformy .NET, aby otrzymywać te komunikaty z tematu.

Ważne

Przestrzenie nazw, tematy przestrzeni nazw i subskrypcje zdarzeń skojarzone z tematami przestrzeni nazw są początkowo dostępne w następujących regionach:

  • Wschodnie stany USA
  • Środkowe stany USA
  • South Central US
  • Zachodnie stany USA 2
  • Azja Wschodnia
  • Southeast Asia
  • Europa Północna
  • West Europe
  • Północne Zjednoczone Emiraty Arabskie

Uwaga

Ten przewodnik Szybki start zawiera instrukcje krok po kroku dotyczące implementowania prostego scenariusza wysyłania partii komunikatów do tematu przestrzeni nazw usługi Event Grid, a następnie odbierania ich. Aby zapoznać się z omówieniem biblioteki klienta platformy .NET, zobacz Biblioteka klienta usługi Azure Event Grid dla platformy .NET. Aby uzyskać więcej przykładów, zobacz Przykłady dla platformy .NET usługi Event Grid w witrynie GitHub.

Wymagania wstępne

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

  • Subskrypcja platformy Azure. Do korzystania z usług platformy Azure, w tym usługi Azure Event Grid, 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. 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

Przestrzeń nazw w usłudze Azure Event Grid jest kontenerem logicznym dla co najmniej jednego tematu, klientów, grup klientów, przestrzeni tematów i powiązań uprawnień. Zapewnia on unikatową przestrzeń nazw, umożliwiając posiadanie wielu zasobów w tym samym regionie świadczenia usługi Azure. Dzięki przestrzeni nazw usługi Azure Event Grid możesz teraz grupować powiązane zasoby i zarządzać nimi jako pojedynczą jednostką w ramach subskrypcji platformy Azure.

Postępuj zgodnie z kolejnymi sekcjami, aby utworzyć przestrzeń nazw usługi Azure Event Grid i zarządzać nią.

Aby utworzyć przestrzeń nazw:

  1. Zaloguj się w witrynie Azure Portal.

  2. W polu wyszukiwania wpisz Event Grid Namespaces (Przestrzenie nazw usługi Event Grid) i wybierz pozycję Event Grid Namespaces (Przestrzenie nazw usługi Event Grid) z wyników.

    Screenshot showing Event Grid Namespaces in the search results.

  3. Na stronie Przestrzenie nazw usługi Event Grid wybierz pozycję + Utwórz na pasku narzędzi.

    Screenshot showing Event Grid Namespaces page with the Create button on the toolbar selected.

  4. Na stronie Podstawy wykonaj następujące kroki.

    1. Wybierz subskrypcję platformy Azure, w której chcesz utworzyć przestrzeń nazw.

    2. Wybierz istniejącą grupę zasobów lub utwórz grupę zasobów.

    3. Wprowadź nazwę przestrzeni nazw.

    4. Wybierz region lub lokalizację , w której chcesz utworzyć przestrzeń nazw.

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

      Screenshot showing the Basics tab of Create namespace page.

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

  6. Na stronie Wdrożenie powiodło się wybierz pozycję Przejdź do zasobu, aby przejść do przestrzeni nazw.

Tworzenie tematu przestrzeni nazw

  1. Jeśli nie jesteś na stronie Przestrzeni nazw usługi Event Grid, wykonaj kroki tworzenia, wyświetlania przestrzeni nazw i zarządzania nimi, aby wyświetlić przestrzeń nazw , której chcesz użyć do utworzenia tematu.

  2. Na stronie Przestrzeń nazw usługi Event Grid wybierz opcję Tematy w sekcji Eventing w menu po lewej stronie.

  3. Na stronie Tematy wybierz przycisk + Temat na pasku poleceń.

    Screenshot showing Event Grid namespace topic creation.

  4. Na stronie Tworzenie tematu wpisz nazwę tematu, który chcesz utworzyć, a następnie wybierz pozycję Utwórz.

    Screenshot showing Event Grid namespace topic creation basics.

Tworzenie subskrypcji zdarzeń

  1. Jeśli jesteś na stronie Tematy przestrzeni nazw usługi Event Grid w witrynie Azure Portal, wybierz temat z listy tematów. Jeśli jesteś na stronie Tematy , postępuj zgodnie z instrukcjami z tworzenia, wyświetlania i zarządzania tematami przestrzeni nazw, aby zidentyfikować temat, którego chcesz użyć do utworzenia subskrypcji zdarzeń.

  2. Na stronie Temat obszaru nazw gird zdarzeń wybierz opcję Subskrypcje w sekcji Jednostki w menu po lewej stronie.

  3. Na stronie Subskrypcje wybierz przycisk "+ Subskrypcja" na pasku poleceń.

    Screenshot showing Event Grid event subscription create.

  4. Na karcie Podstawowe wpisz nazwę tematu, który chcesz utworzyć, a następnie wybierz pozycję Dalej: Filtry w dolnej części strony.

    Screenshot showing Event Grid event subscription create basics.

  5. Na karcie Filtry dodaj nazwy typów zdarzeń, które chcesz filtrować w subskrypcji, i dodaj filtry atrybutów kontekstu, których chcesz użyć w subskrypcji. Następnie wybierz pozycję Dalej: dodatkowe funkcje w dolnej części strony.

    Screenshot showing Event Grid event subscription create filters.

  6. Na karcie Dodatkowe funkcje można określić ustawienia przechowywania zdarzeń, maksymalnej liczby dostarczania, czasu trwania blokady i utraconych komunikatów.

    Screenshot showing Event Grid event subscription create additional features.

  7. Wybierz pozycję Utwórz , aby utworzyć subskrypcję zdarzeń.

Uwierzytelnianie aplikacji na platformie Azure

W tym przewodniku Szybki start przedstawiono sposoby nawiązywania połączenia z usługą Azure Event Grid: parametry połączenia.

W tym dokumencie pokazano, jak używać parametry połączenia do nawiązywania połączenia z przestrzenią nazw usługi Event Grid. Jeśli dopiero zaczynasz korzystać z platformy Azure, możesz znaleźć opcję parametry połączenia łatwiejszą do naśladowania.

Utworzenie nowej przestrzeni nazw usługi Event Grid automatycznie generuje początkowy klucz podstawowy i pomocniczy, który zapewnia pełną kontrolę nad wszystkimi aspektami przestrzeni nazw lub tematów.

Klient może użyć parametry połączenia do nawiązania połączenia z przestrzenią nazw usługi Event Grid. Aby skopiować klucze dostępu dla tematu przestrzeni nazw, wykonaj następujące kroki:

  1. Na stronie Przestrzeń nazw usługi Event Grid wybierz pozycję Tematy.
  2. Wybierz temat, do którego chcesz uzyskać dostęp.
  3. Na stronie Klucze dostępu wybierz przycisk kopiowania obok pozycji Klucz 1 lub Klucz 2, aby skopiować klucze dostępu do schowka do późniejszego użycia. Wklej tę wartość do Notatnika lub innej tymczasowej lokalizacji.

Uruchamianie programu Visual Studio

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

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

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 Event Grid.

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.

      Screenshot showing the Create a new project dialog box with C# and Console selected.

  3. Wprowadź wartość EventSender jako nazwę projektu EventGridQuickStartjako nazwę rozwiązania, a następnie wybierz pozycję Dalej.

    Screenshot showing the solution and project names in the Configure your new project dialog box.

  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.EventGrid :

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

Dodawanie kodu do wysyłania zdarzenia do tematu przestrzeni nazw

  1. Zastąp zawartość Program.cs pliku następującym kodem. Ważne kroki zostały opisane wraz z dodatkowymi informacjami w komentarzach do kodu.

    Ważne

    Zaktualizuj wartości symboli zastępczych (<ENDPOINT> , , <TOPIC-NAME><TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>) we fragmencie kodu przy użyciu punktu końcowego tematu, nazwy tematu, klucza tematu, nazwy subskrypcji tematu.

    using Azure.Messaging;
    using Azure;
    using Azure.Messaging.EventGrid.Namespaces;    
    
    // TODO: Replace the <ENDPOINT> , <TOPIC-KEY> and <TOPIC-NAME> placeholder
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), new AzureKeyCredential(topicKey));
    
    // Publish a single CloudEvent using a custom TestModel for the event data.
    var @ev = new CloudEvent("employee_source", "type", new TestModel { Name = "Bob", Age = 18 });
    await client.PublishCloudEventAsync(topicName, ev);
    
    // Publish a batch of CloudEvents.
    
    await client.PublishCloudEventsAsync(
    topicName,
    new[] {
        new CloudEvent("employee_source", "type", new TestModel { Name = "Tom", Age = 55 }),
        new CloudEvent("employee_source", "type", new TestModel { Name = "Alice", Age = 25 })});
    
    Console.WriteLine("Three events have been published to the topic. Press any key to end the application.");
    Console.ReadKey();
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    
    
  2. Skompiluj projekt i upewnij się, że nie ma żadnych błędów.

  3. Uruchom program i poczekaj na komunikat potwierdzenia.

    Three events have been published to the topic. Press any key to end the application.
    

    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 Event Grid.

    2. Na stronie Przegląd zobaczysz liczbę zdarzeń opublikowanych w przestrzeni nazw na wykresie.

      Screenshot showing the Event Grid Namespace page in the Azure portal.

Ściąganie komunikatów z tematu

W tej sekcji utworzysz aplikację konsolową platformy .NET, która odbiera komunikaty z tematu.

Tworzenie projektu w celu otrzymania opublikowanych rozwiązań CloudEvents

  1. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy rozwiązanie EventGridQuickStart, wskaż polecenie Dodaj i wybierz pozycję Nowy projekt.
  2. Wybierz pozycję Aplikacja konsolowa, a następnie wybierz pozycję Dalej.
  3. Wprowadź wartość EventReceiver jako nazwę projektu, a następnie wybierz pozycję Utwórz.
  4. W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję EventReceiver 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. Uruchom następujące polecenie, aby zainstalować pakiet NuGet Azure.Messaging.EventGrid . Wybierz pozycję EventReceiver dla projektu domyślnego, jeśli nie został jeszcze ustawiony.

    Install-Package Azure.Messaging.EventGrid -version 4.22.0-beta.1
    

    Screenshot showing EventReceiver project selected in the Package Manager Console.

Dodawanie kodu do odbierania zdarzeń z tematu

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

  1. Program W klasie dodaj następujący kod:

    Ważne

    Zaktualizuj wartości symboli zastępczych (<ENDPOINT> , , <TOPIC-NAME><TOPIC-ACCESS-KEY>, <TOPIC-SUBSCRIPTION-NAME>) we fragmencie kodu przy użyciu punktu końcowego tematu, nazwy tematu, klucza tematu, nazwy subskrypcji tematu.

    using Azure;
    using Azure.Messaging;
    using Azure.Messaging.EventGrid.Namespaces;
    
    var topicEndpoint = "<TOPIC-ENDPOINT>"; // Should be in the form: https://namespace01.eastus-1.eventgrid.azure.net. 
    var topicKey = "<TOPIC-ACCESS-KEY>";
    var topicName = "<TOPIC-NAME>";
    var subscription = "<TOPIC-SUBSCRIPTION-NAME>";
    
    // Construct the client using an Endpoint for a namespace as well as the access key
    var client = new EventGridClient(new Uri(topicEndpoint), new AzureKeyCredential(topicKey));
    
    // Receive the published CloudEvents
    ReceiveResult result = await client.ReceiveCloudEventsAsync(topicName, subscription, 3);
    
    Console.WriteLine("Received Response");
    Console.WriteLine("-----------------");
    
    
  2. Dołącz następujące metody na końcu Program klasy.

    // handle received messages. Define these variables on the top.
    
    var toRelease = new List<string>();
    var toAcknowledge = new List<string>();
    var toReject = new List<string>();
    
    // Iterate through the results and collect the lock tokens for events we want to release/acknowledge/result
    
    foreach (ReceiveDetails detail in result.Value)
    {
        CloudEvent @event = detail.Event;
        BrokerProperties brokerProperties = detail.BrokerProperties;
        Console.WriteLine(@event.Data.ToString());
    
        // The lock token is used to acknowledge, reject or release the event
        Console.WriteLine(brokerProperties.LockToken);
        Console.WriteLine();
    
        // If the event is from the "employee_source" and the name is "Bob", we are not able to acknowledge it yet, so we release it
        if (@event.Source == "employee_source" && @event.Data.ToObjectFromJson<TestModel>().Name == "Bob")
        {
            toRelease.Add(brokerProperties.LockToken);
        }
        // acknowledge other employee_source events
        else if (@event.Source == "employee_source")
        {
            toAcknowledge.Add(brokerProperties.LockToken);
        }
        // reject all other events
        else
        {
            toReject.Add(brokerProperties.LockToken);
        }
    }
    
    // Release/acknowledge/reject the events
    
    if (toRelease.Count > 0)
    {
        ReleaseResult releaseResult = await client.ReleaseCloudEventsAsync(topicName, subscription, new ReleaseOptions(toRelease));
    
        // Inspect the Release result
        Console.WriteLine($"Failed count for Release: {releaseResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in releaseResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Release: {releaseResult.SucceededLockTokens.Count}");
        foreach (string lockToken in releaseResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toAcknowledge.Count > 0)
    {
        AcknowledgeResult acknowledgeResult = await client.AcknowledgeCloudEventsAsync(topicName, subscription, new AcknowledgeOptions(toAcknowledge));
    
        // Inspect the Acknowledge result
        Console.WriteLine($"Failed count for Acknowledge: {acknowledgeResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in acknowledgeResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Acknowledge: {acknowledgeResult.SucceededLockTokens.Count}");
        foreach (string lockToken in acknowledgeResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    if (toReject.Count > 0)
    {
        RejectResult rejectResult = await client.RejectCloudEventsAsync(topicName, subscription, new RejectOptions(toReject));
    
        // Inspect the Reject result
        Console.WriteLine($"Failed count for Reject: {rejectResult.FailedLockTokens.Count}");
        foreach (FailedLockToken failedLockToken in rejectResult.FailedLockTokens)
        {
            Console.WriteLine($"Lock Token: {failedLockToken.LockToken}");
            Console.WriteLine($"Error Code: {failedLockToken.Error}");
            Console.WriteLine($"Error Description: {failedLockToken.ToString}");
        }
    
        Console.WriteLine($"Success count for Reject: {rejectResult.SucceededLockTokens.Count}");
        foreach (string lockToken in rejectResult.SucceededLockTokens)
        {
            Console.WriteLine($"Lock Token: {lockToken}");
        }
        Console.WriteLine();
    }
    
    public class TestModel
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }    
    

Czyszczenie zasobów

Przejdź do przestrzeni nazw usługi Event Grid w witrynie Azure Portal i wybierz pozycję Usuń w witrynie Azure Portal, aby usunąć przestrzeń nazw usługi Event Grid i temat w nim.

Zobacz Dokumentacja interfejsu API platformy .NET.