Wysyłanie komunikatów do tematu usługi Azure Service Bus i odbieranie komunikatów z subskrypcji do tematu (JavaScript)

W tym samouczku 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ę JavaScript, aby używać pakietu @azure/service-bus do:
    • Wyślij zestaw komunikatów do tematu.
    • Odbieranie tych komunikatów z subskrypcji.

Uwaga

Ten przewodnik Szybki start zawiera instrukcje krok po kroku dotyczące prostego scenariusza wysyłania partii komunikatów do tematu usługi Service Bus i odbierania tych komunikatów z subskrypcji tematu. W repozytorium Azure SDK dla języka JavaScript dla języka JavaScript i TypeScript można znaleźć wstępnie utworzone przykłady dla usługi Azure Service Bus w repozytorium Zestawu Azure SDK dla języka JavaScript w witrynie GitHub.

Wymagania wstępne

Aby użyć tego przewodnika Szybki start z własnym kontem platformy Azure, potrzebne są następujące elementy:

  • Zainstaluj interfejs wiersza polecenia platformy Azure, który zapewnia uwierzytelnianie bez hasła na maszynie dewelopera.
  • Zaloguj się przy użyciu konta platformy Azure w terminalu lub wierszu polecenia za pomocą polecenia az login.
  • Użyj tego samego konta podczas dodawania odpowiedniej roli do zasobu.
  • Uruchom kod w tym samym terminalu lub wierszu polecenia.
  • Zanotuj nazwę tematu i subskrypcję dla przestrzeni nazw usługi Service Bus. Będzie to potrzebne w kodzie.

Uwaga

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.

    Image showing selection of Create a resource, Integration, and then Service Bus in the 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 polu Grupa zasobów wybierz istniejącą grupę zasobów, w której znajdzie się przestrzeń nazw, 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" ani "-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.

      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.

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

      Image showing the Create a namespace page

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

    Image showing the deployment succeeded page with the Go to resource link.

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

    Image showing the home page of the Service Bus namespace created.

Tworzenie tematu przy użyciu witryny Azure Portal

  1. Na stronie Przestrzeń nazw usługi Service Bus wybierz pozycję Tematy z 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.

    Image showing the Create topic page.

Tworzenie subskrypcji tematu

  1. Wybierz temat utworzony w poprzedniej sekcji.

    Image showing the selection of topic from the list of topics.

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

    Image showing the Add subscription button.

  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ę.

      Image showing the Create subscription page.

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ę Administracja istratora 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.

    A screenshot showing how to assign a role.

  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.

Instalowanie menedżera NPM (Node Package Manager)

  1. Aby zainstalować wymagane pakiety npm dla usługi Service Bus, otwórz wiersz polecenia, który ma npm w swojej ścieżce, zmień katalog na folder, w którym chcesz mieć przykłady, a następnie uruchom to polecenie.

  2. Zainstaluj następujące pakiety:

    npm install @azure/service-bus @azure/identity
    

Wysyłanie komunikatów do tematu

Poniższy przykładowy kod przedstawia sposób wysyłania partii komunikatów do tematu usługi Service Bus. Aby uzyskać szczegółowe informacje, zobacz komentarze kodu.

Aby maszyna lokalna mogła zapewnić uwierzytelnianie bez hasła wymagane w tym kodzie, musisz zalogować się przy użyciu interfejsu wiersza polecenia az login platformy Azure.

  1. Otwieranie ulubionego edytora, takiego jak Visual Studio Code

  2. Utwórz plik o nazwie sendtotopic.js i wklej do niego poniższy kod. Ten kod wyśle komunikat do tematu.

    Ważne

    Poświadczenie bez hasła jest dostarczane z wartością DefaultAzureCredential.

    const { ServiceBusClient } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    const topicName = "<TOPIC NAME>";
    
    const messages = [
        { body: "Albert Einstein" },
        { body: "Werner Heisenberg" },
        { body: "Marie Curie" },
        { body: "Steven Hawking" },
        { body: "Isaac Newton" },
        { body: "Niels Bohr" },
        { body: "Michael Faraday" },
        { body: "Galileo Galilei" },
        { body: "Johannes Kepler" },
        { body: "Nikolaus Kopernikus" }
     ];
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createSender() can also be used to create a sender for a queue.
        const sender = sbClient.createSender(topicName);
    
        try {
            // Tries to send all messages in a single batch.
            // Will fail if the messages cannot fit in a batch.
            // await sender.sendMessages(messages);
    
            // create a batch object
            let batch = await sender.createMessageBatch();
            for (let i = 0; i < messages.length; i++) {
                // for each message in the array
    
                // try to add the message to the batch
                if (!batch.tryAddMessage(messages[i])) {
                    // if it fails to add the message to the current batch
                    // send the current batch as it is full
                    await sender.sendMessages(batch);
    
                    // then, create a new batch
                    batch = await sender.createMessageBatch();
    
                    // now, add the message failed to be added to the previous batch to this batch
                    if (!batch.tryAddMessage(messages[i])) {
                        // if it still can't be added to the batch, the message is probably too big to fit in a batch
                        throw new Error("Message too big to fit in a batch");
                    }
                }
            }
    
            // Send the last created batch of messages to the topic
            await sender.sendMessages(batch);
    
            console.log(`Sent a batch of messages to the topic: ${topicName}`);
    
            // Close the sender
            await sender.close();
        } finally {
            await sbClient.close();
        }
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Zastąp <SERVICE BUS NAMESPACE CONNECTION STRING> ciąg parametry połączenia przestrzenią nazw usługi Service Bus.

  4. Zastąp <TOPIC NAME> ciąg nazwą tematu.

  5. Następnie uruchom polecenie w wierszu polecenia, aby wykonać ten plik.

    node sendtotopic.js
    
  6. Powinny zostać wyświetlone następujące dane wyjściowe.

    Sent a batch of messages to the topic: mytopic
    

Odbieranie komunikatów z subskrypcji

Aby maszyna lokalna mogła zapewnić uwierzytelnianie bez hasła wymagane w tym kodzie, musisz zalogować się przy użyciu interfejsu wiersza polecenia az login platformy Azure.

  1. Otwieranie ulubionego edytora, takiego jak Visual Studio Code

  2. Utwórz plik o nazwie receivefromsubscription.js i wklej do niego następujący kod. Aby uzyskać szczegółowe informacje, zobacz komentarze kodu.

    const { delay, ServiceBusClient, ServiceBusMessage } = require("@azure/service-bus");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Replace `<SERVICE-BUS-NAMESPACE>` with your namespace
    const fullyQualifiedNamespace = "<SERVICE-BUS-NAMESPACE>.servicebus.windows.net";
    
    // Passwordless credential
    const credential = new DefaultAzureCredential();
    
    const topicName = "<TOPIC NAME>";
    const subscriptionName = "<SUBSCRIPTION NAME>";
    
     async function main() {
        // create a Service Bus client using the passwordless authentication to the Service Bus namespace
        const sbClient = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
        // createReceiver() can also be used to create a receiver for a queue.
        const receiver = sbClient.createReceiver(topicName, subscriptionName);
    
        // function to handle messages
        const myMessageHandler = async (messageReceived) => {
            console.log(`Received message: ${messageReceived.body}`);
        };
    
        // function to handle any errors
        const myErrorHandler = async (error) => {
            console.log(error);
        };
    
        // subscribe and specify the message and error handlers
        receiver.subscribe({
            processMessage: myMessageHandler,
            processError: myErrorHandler
        });
    
        // Waiting long enough before closing the sender to send messages
        await delay(5000);
    
        await receiver.close();
        await sbClient.close();
    }
    
    // call the main function
    main().catch((err) => {
        console.log("Error occurred: ", err);
        process.exit(1);
     });
    
  3. Zastąp <SERVICE BUS NAMESPACE CONNECTION STRING> ciąg parametry połączenia przestrzeni nazw.

  4. Zastąp <TOPIC NAME> ciąg nazwą tematu.

  5. Zastąp <SUBSCRIPTION NAME> ciąg nazwą subskrypcji tematu.

  6. Następnie uruchom polecenie w wierszu polecenia, aby wykonać ten plik.

    node receivefromsubscription.js
    

Powinny zostać wyświetlone następujące dane wyjściowe.

Received message: Albert Einstein
Received message: Werner Heisenberg
Received message: Marie Curie
Received message: Steven Hawking
Received message: Isaac Newton
Received message: Niels Bohr
Received message: Michael Faraday
Received message: Galileo Galilei
Received message: Johannes Kepler
Received message: Nikolaus Kopernikus

W witrynie Azure Portal przejdź do przestrzeni nazw usługi Service Bus, przejdź do obszaru Tematy w dolnym okienku i wybierz temat, aby wyświetlić stronę Temat usługi Service Bus dla tematu. Na tej stronie powinien zostać wyświetlonych 10 przychodzących i 10 wychodzących komunikatów na wykresie Komunikaty .

Incoming and outgoing messages

Jeśli uruchomisz tylko aplikację wysyłania następnym razem, na stronie Temat usługi Service Bus zobaczysz 20 komunikatów przychodzących (10 nowych), ale 10 komunikatów wychodzących.

Updated topic page

Na tej stronie po wybraniu subskrypcji w dolnym okienku zostanie wyświetlona strona Subskrypcja usługi Service Bus. Możesz zobaczyć liczbę aktywnych komunikatów, liczbę komunikatów utraconych i więcej na tej stronie. W tym przykładzie istnieje 10 aktywnych komunikatów, które nie zostały jeszcze odebrane przez odbiornik.

Active message count

Rozwiązywanie problemów

Jeśli podczas uruchamiania bez hasła kodu JavaScript dotyczącego wymaganych oświadczeń wystąpi błąd, upewnij się, że logujesz się za pomocą polecenia interfejsu wiersza polecenia platformy Azure, az login a odpowiednia rola jest stosowana do konta użytkownika platformy Azure.

Czyszczenie zasobów

Przejdź do przestrzeni nazw usługi Service Bus w witrynie Azure Portal i wybierz pozycję Usuń w witrynie Azure Portal, aby usunąć przestrzeń nazw i kolejkę w niej.

Następne kroki

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