Udostępnij za pośrednictwem


Szybki start: wysyłanie i odbieranie komunikatów do/z kolejek Azure Service Bus (Python)

Ten artykuł zawiera instrukcje krok po kroku dotyczące prostego scenariusza wysyłania komunikatów do kolejki usługi Service Bus i odbierania ich. Wstępnie utworzone przykłady języka JavaScript i TypeScript dla usługi Azure Service Bus można znaleźć w repozytorium zestawu Azure SDK dla języka Python w witrynie GitHub.

W ramach tego szybkiego przewodnika wykonasz następujące czynności:

  • Utworzenie przestrzeni nazw usługi Service Bus za pomocą usługi Azure Portal.

  • Utworzenie kolejki usługi Service Bus przy użyciu witryny Azure Portal.

  • Napisz kod w języku Python, aby użyć pakietu azure-servicebus do:

    • Wysyłanie zestawu komunikatów do kolejki.
    • Odbierz te komunikaty z kolejki.

Jeśli dopiero zaczynasz mieć dostęp do usługi, najpierw zapoznaj się z Omówieniem usługi Service Bus.

Wymagania wstępne

Aby użyć tego przewodnika Szybki start z własnym kontem platformy Azure:

  • 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 danych do zasobu.
  • Uruchom kod w tym samym terminalu lub wierszu polecenia.
  • Zanotuj nazwę kolejki dla przestrzeni nazw usługi Service Bus. Potrzebujesz tego w kodzie.

Ten przewodnik szybkiego startu współpracuje z przykładami, które można kopiować i uruchamiać w Pythonie. Aby uzyskać instrukcje dotyczące tworzenia aplikacji w języku Python, zobacz Szybki start: wdrażanie aplikacji internetowej w języku Python w usłudze Azure App Service. Aby uzyskać więcej informacji na temat instalowania pakietów używanych w tym przewodniku Szybki start, zobacz How to install Azure library packages for Python (Jak zainstalować pakiety bibliotek platformy Azure dla języka Python).

Tworzenie przestrzeni nazw w witrynie Azure Portal

Aby rozpocząć korzystanie z jednostek obsługi komunikatów usługi Service Bus na platformie Azure, utwórz przestrzeń nazw o nazwie unikatowej na platformie Azure. Przestrzeń nazw udostępnia kontener określania zakresu dla zasobów usługi Service Bus, takich jak kolejki i tematy, w aplikacji.

Aby utworzyć przestrzeń nazw:

  1. Zaloguj się w witrynie Azure Portal.

  2. Wybierz menu wysuwane w lewym górnym rogu i przejdź do strony Wszystkie usługi.

  3. Na lewym pasku nawigacyjnym wybierz pozycję Integracja.

  4. Przewiń w dół do pozycji Usługi obsługi komunikatów>Service Bus i wybierz pozycję Utwórz.

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

  5. Na karcie 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 , która spełnia następujące konwencje 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 obszarze Lokalizacja wybierz region do hostowania przestrzeni nazw.

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

      W przypadku wybrania warstwy Premium 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 i 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 Warstwę Premium komunikatów usługi Service Bus.

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

      Zrzut ekranu przedstawiający stronę Tworzenie przestrzeni nazw

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

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

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

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

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

Tworzenie kolejki w witrynie Azure Portal

  1. Na stronie Przestrzeń nazw usługi Service Bus rozwiń węzeł Jednostki w menu nawigacyjnym po lewej stronie i wybierz pozycję Kolejki.

  2. Na stronie Kolejki na pasku narzędzi wybierz pozycję + Kolejka.

  3. Wprowadź nazwę kolejki. Pozostaw pozostałe wartości z ustawieniami domyślnymi.

  4. Wybierz Utwórz.

    Zrzut ekranu przedstawiający stronę Tworzenie kolejki.

Uwierzytelnianie aplikacji na platformie Azure

W tym artykule 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, w pliku konfiguracji ani w bezpiecznym magazynie, na przykład w usłudze 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 usługi Service Bus. Aby dowiedzieć się więcej na temat uwierzytelniania bez hasła, zobacz Uwierzytelnianie aplikacji platformy .NET.

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, potrzebna jest rola 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. Aby dowiedzieć się więcej o dostępnych zakresach przypisań ról, zobacz Omówienie zakresu kontroli dostępu opartej na rolach platformy Azure.

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 następujące wbudowane role platformy Azure umożliwiające autoryzowanie dostępu do przestrzeni nazw usługi Service Bus:

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. Ta konfiguracja umożliwia aplikacji uruchamianej w kontekście konta użytkownika wysyłanie komunikatów do kolejki lub tematu. Może przyjmować komunikaty z kolejki lub subskrypcji tematu.

Ważne

W większości przypadków propagacja przypisania roli na platformie Azure zajmuje 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ąd 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 + Dodaj z górnego menu, a następnie Dodaj przypisanie roli.

    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.

Instalowanie pakietów przy użyciu narzędzia

  1. Aby zainstalować wymagane pakiety języka Python dla tego przewodnika 'Szybki start' usługi Service Bus, otwórz okno wiersza polecenia z Pythonem w swojej ścieżce.

  2. Zmień katalog na folder, w którym chcesz mieć przykłady.

  3. Zainstaluj następujące pakiety:

    pip install azure-servicebus
    pip install azure-identity
    pip install aiohttp
    

Wysyłanie komunikatów do kolejki

Poniższy przykładowy kod przedstawia sposób wysyłania komunikatu do kolejki. Otwórz edytor tekstów, taki jak Visual Studio Code, utwórz plik send.py i dodaj do niego następujący kod.

  1. Dodaj instrukcje importu.

    import asyncio
    from azure.servicebus.aio import ServiceBusClient
    from azure.servicebus import ServiceBusMessage
    from azure.identity.aio import DefaultAzureCredential
    
  2. Dodaj stałe i zdefiniuj poświadczenia.

    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    QUEUE_NAME = "QUEUE_NAME"
    
    credential = DefaultAzureCredential()
    

    Ważne

    • Zastąp FULLY_QUALIFIED_NAMESPACE element w pełni kwalifikowaną przestrzenią nazw dla przestrzeni nazw usługi Service Bus.
    • Zastąp QUEUE_NAME ciąg nazwą kolejki.
  3. Dodaj metodę wysyłania pojedynczego komunikatu.

    async def send_single_message(sender):
        # Create a Service Bus message and send it to the queue
        message = ServiceBusMessage("Single Message")
        await sender.send_messages(message)
        print("Sent a single message")
    

    Nadawca jest obiektem, który działa jako klient utworzonej kolejki. Utworzysz go później i wyślesz jako argument do tej funkcji.

  4. Dodaj metodę do wysyłania listy komunikatów.

    async def send_a_list_of_messages(sender):
        # Create a list of messages and send it to the queue
        messages = [ServiceBusMessage("Message in list") for _ in range(5)]
        await sender.send_messages(messages)
        print("Sent a list of 5 messages")
    
  5. Dodaj metodę do wysyłania partii komunikatów.

    async def send_batch_message(sender):
        # Create a batch of messages
        async with sender:
            batch_message = await sender.create_message_batch()
            for _ in range(10):
                try:
                    # Add a message to the batch
                    batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch"))
                except ValueError:
                    # ServiceBusMessageBatch object reaches max_size.
                    # New ServiceBusMessageBatch object can be created here to send more data.
                    break
            # Send the batch of messages to the queue
            await sender.send_messages(batch_message)
        print("Sent a batch of 10 messages")
    
  6. Utwórz klienta usługi Service Bus, a następnie obiekt nadawcy kolejki do wysyłania komunikatów.

    async def run():
        # create a Service Bus client using the credential
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
            # get a Queue Sender object to send messages to the queue
            sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME)
            async with sender:
                # send one message
                await send_single_message(sender)
                # send a list of messages
                await send_a_list_of_messages(sender)
                # send a batch of messages
                await send_batch_message(sender)
    
            # Close credential when no longer needed.
            await credential.close()
    
  7. Wywołaj metodę run i wyświetl komunikat.

    asyncio.run(run())
    print("Done sending messages")
    print("-----------------------")
    

Odbieranie komunikatów z kolejki

Poniższy przykładowy kod pokazuje, jak odbierać komunikaty z kolejki. Pokazany kod odbiera nowe komunikaty, dopóki nie otrzyma żadnych nowych komunikatów przez 5 (max_wait_time) sekund.

Otwórz edytor tekstów, taki jak Visual Studio Code, utwórz plik recv.py i dodaj do niego następujący kod.

  1. Podobnie jak w przykładzie send.py, dodaj import oświadczenia. Zastąp stałe własnymi wartościami i zdefiniuj poświadczenie.

    import asyncio
    
    from azure.servicebus.aio import ServiceBusClient
    from azure.identity.aio import DefaultAzureCredential
    
    FULLY_QUALIFIED_NAMESPACE = "FULLY_QUALIFIED_NAMESPACE"
    QUEUE_NAME = "QUEUE_NAME"
    
    credential = DefaultAzureCredential()
    
  2. Utwórz klienta usługi Service Bus, a następnie obiekt odbiornika kolejki w celu odbierania komunikatów.

    async def run():
        # create a Service Bus client using the connection string
        async with ServiceBusClient(
            fully_qualified_namespace=FULLY_QUALIFIED_NAMESPACE,
            credential=credential,
            logging_enable=True) as servicebus_client:
    
            async with servicebus_client:
                # get the Queue Receiver object for the queue
                receiver = servicebus_client.get_queue_receiver(queue_name=QUEUE_NAME)
                async with receiver:
                    received_msgs = await receiver.receive_messages(max_wait_time=5, max_message_count=20)
                    for msg in received_msgs:
                        print("Received: " + str(msg))
                        # complete the message so that the message is removed from the queue
                        await receiver.complete_message(msg)
    
            # Close credential when no longer needed.
            await credential.close()
    
  3. Wywołaj metodę run .

    asyncio.run(run())
    

Uruchom aplikację

Otwórz wiersz polecenia zawierający język Python w swojej ścieżce, a następnie uruchom kod, aby wysyłać i odbierać komunikaty z kolejki.

python send.py; python recv.py

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

Sent a single message
Sent a list of 5 messages
Sent a batch of 10 messages
Done sending messages
-----------------------
Received: Single Message
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message in list
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch
Received: Message inside a ServiceBusMessageBatch

W witrynie Azure Portal przejdź do przestrzeni nazw usługi Service Bus. Na stronie Przegląd sprawdź, czy liczba komunikatów przychodzących i wychodzących to 16. Jeśli nie widzisz liczników, poczekaj kilka minut, a następnie odśwież stronę.

Liczba komunikatów przychodzących i wychodzących

Wybierz kolejkę na tej stronie Przegląd , aby przejść do strony Kolejka usługi Service Bus. Na tej stronie można również zobaczyć liczbę komunikatów przychodzących i wychodzących . Zobaczysz również inne informacje, takie jak bieżący rozmiar kolejki i liczba aktywnych komunikatów.

Szczegóły kolejki

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