Sdílet prostřednictvím


Rychlý start: Odesílání událostí do centra událostí nebo příjem událostí pomocí JavaScriptu

V tomto rychlém startu se dozvíte, jak odesílat události do centra událostí a přijímat je z centra událostí pomocí balíčku npm @azure/event-hubs .

Pokud s Azure Event Hubs teprve začínáte, podívejte se na přehled služby Event Hubs , než začnete.

Požadavky

  • Předplatné Microsoft Azure. Pokud chcete používat služby Azure, včetně služby Azure Event Hubs, potřebujete předplatné. Pokud nemáte účet Azure, zaregistrujte si bezplatnou zkušební verzi.
  • Node.js LTS. Stáhněte si nejnovější verzi dlouhodobé podpory (LTS).
  • Visual Studio Code (doporučeno) nebo jakékoli jiné integrované vývojové prostředí (IDE).
  • Vytvořte obor názvů Event Hubs a centrum událostí. Pomocí portálu Azure vytvořte obor názvů typu Event Hubs. Získejte přihlašovací údaje pro správu, které vaše aplikace potřebuje ke komunikaci s centrem událostí. Další informace najdete v tématu Vytvoření centra událostí pomocí webu Azure Portal.

Instalace balíčků npm pro odesílání událostí

Pokud chcete nainstalovat balíček Node Package Manager (npm) pro službu Event Hubs, otevřete okno příkazového řádku, které má npm v cestě. Změňte adresář na složku, do které chcete zachovat ukázky.

Spusťte tyto příkazy:

npm install @azure/event-hubs
npm install @azure/identity

Ověření aplikace v Azure

V tomto rychlém startu se můžete připojit ke službě Azure Event Hubs dvěma způsoby:

  • Bez hesla. Pomocí objektu zabezpečení v Microsoft Entra ID a řízení přístupu na základě role (RBAC) se připojte k oboru názvů služby Event Hubs. Nemusíte si dělat starosti s pevně zakódovanými připojovacími řetězci v kódu, v konfiguračním souboru nebo v zabezpečeném úložišti, jako je Azure Key Vault.
  • Připojovací řetězec. Pomocí připojovacího řetězce se připojte k oboru názvů služby Event Hubs. Pokud s Azure začínáte, možná zjistíte, že připojovací řetězec možnost je jednodušší postupovat.

Doporučujeme používat možnost bez hesla v reálných aplikacích a produkčních prostředích. Další informace najdete v tématu Ověřování a autorizace služby Service Bus apřipojení bez hesla pro služby Azure.

Přiřazení rolí uživateli Microsoft Entra

Při místním vývoji se ujistěte, že uživatelský účet, který se připojuje ke službě Azure Event Hubs, má správná oprávnění. K odesílání a příjmu zpráv potřebujete roli Vlastník dat služby Azure Event Hubs . K přiřazení této role potřebujete roli Správce uživatelských přístupů nebo jinou roli, která tuto Microsoft.Authorization/roleAssignments/write akci zahrnuje. Role Azure RBAC můžete uživateli přiřadit pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu. Další informace viz na stránce Pochopení rozsahu pro Azure RBAC.

Následující příklad přiřadí roli k vašemu uživatelskému Azure Event Hubs Data Owner účtu, který poskytuje úplný přístup k prostředkům služby Azure Event Hubs. V reálném scénáři postupujte podle principu nejnižšího oprávnění , aby uživatelům poskytla pouze minimální oprávnění potřebná pro bezpečnější produkční prostředí.

Předdefinované role Azure pro Azure Event Hubs

Pro službu Azure Event Hubs je správa oborů názvů a všech souvisejících prostředků prostřednictvím Azure Portal a rozhraní Azure Resource Management API již chráněna pomocí modelu Azure RBAC. Azure poskytuje následující předdefinované role pro autorizaci přístupu k oboru názvů služby Event Hubs.

  • Vlastník dat služby Azure Event Hubs: Umožňuje přístup k datům oboru názvů služby Event Hubs a jeho entitám (fronty, témata, odběry a filtry).
  • Odesílatel dat služby Azure Event Hubs: Pomocí této role dáte odesílateli přístup k oboru názvů služby Event Hubs a jeho entitám.
  • Příjemce dat služby Azure Event Hubs: Pomocí této role dejte příjemci přístup k oboru názvů služby Event Hubs a jeho entitám.

Pokud chcete vytvořit vlastní roli, přečtěte si téma Práva potřebná pro operace služby Event Hubs.

Důležité

Ve většině případů trvá přiřazení role v Azure minutu nebo dvě. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.

  1. Na webu Azure Portal vyhledejte obor názvů služby Event Hubs pomocí hlavního panelu hledání nebo levé navigace.

  2. Na stránce přehledu vyberte v nabídce vlevo řízení přístupu (IAM ).

  3. Na stránce Řízení přístupu (IAM) vyberte kartu Přiřazení rolí.

  4. V horní nabídce vyberte + Přidat . Poté vyberte Přidat přiřazení role.

    Snímek obrazovky znázorňující, jak přiřadit roli

  5. Pomocí vyhledávacího pole vyfiltrujte výsledky podle požadované role. V tomto příkladu vyhledejte Azure Event Hubs Data Owner a vyberte odpovídající výsledek. Pak zvolte Další.

  6. V části Přiřadit přístup vyberte Uživatele, skupinu nebo aplikační objekt. Pak zvolte + Vybrat členy.

  7. V dialogovém okně vyhledejte své uživatelské jméno Microsoft Entra (obvykle vaše user@domain e-mailová adresa). V dolní části dialogového okna zvolte Vybrat .

  8. Výběrem možnosti Zkontrolovat a přiřadit přejděte na poslední stránku. Vyberte Zkontrolovat a přiřadit znovu pro dokončení procesu.

Odesílání událostí

V této části vytvoříte javascriptovou aplikaci, která odesílá události do centra událostí.

  1. Otevřete textový editor, například Visual Studio Code.

  2. Vytvořte soubor s názvem send.js. Vložte do něj následující kód:

    V kódu použijte skutečné hodnoty k nahrazení následujících zástupných symbolů:

    • EVENT HUBS NAMESPACE NAME
    • EVENT HUB NAME
    const { EventHubProducerClient } = require("@azure/event-hubs");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    // Event hubs 
    const eventHubsResourceName = "EVENT HUBS NAMESPACE NAME";
    const fullyQualifiedNamespace = `${eventHubsResourceName}.servicebus.windows.net`; 
    const eventHubName = "EVENT HUB NAME";
    
    // Azure Identity - passwordless authentication
    const credential = new DefaultAzureCredential();
    
    async function main() {
    
      // Create a producer client to send messages to the event hub.
      const producer = new EventHubProducerClient(fullyQualifiedNamespace, eventHubName, credential);
    
      // Prepare a batch of three events.
      const batch = await producer.createBatch();
      batch.tryAdd({ body: "passwordless First event" });
      batch.tryAdd({ body: "passwordless Second event" });
      batch.tryAdd({ body: "passwordless Third event" });    
    
      // Send the batch to the event hub.
      await producer.sendBatch(batch);
    
      // Close the producer client.
      await producer.close();
    
      console.log("A batch of three events have been sent to the event hub");
    }
    
    main().catch((err) => {
      console.log("Error occurred: ", err);
    });
    
  3. Pokud chcete aplikaci spustit, použijte tento příkaz:

    node send.js
    

    Příkaz odesílá dávku tří událostí do event hubu.

    Pokud používáte bezheslové ověřování (řízení přístupu na základě role (RBAC) Microsoft Entra ID), budete se možná muset přihlásit k Azure pomocí účtu, který jste přidali do role Vlastník dat služby Azure Event Hubs. Použijte příkaz az login.

  4. Na webu Azure Portal ověřte, že centrum událostí přijalo zprávy. Pokud chcete graf aktualizovat, aktualizujte stránku. Může trvat několik sekund, než se zobrazí, že se zprávy přijímají.

    Snímek obrazovky se stránkou Přehled, kde můžete ověřit, že centrum událostí přijalo zprávu

    Poznámka:

    Další informace a úplný zdrojový kód najdete na stránce sendEvents.js GitHubu.

Příjem událostí

V této části obdržíte události z centra událostí pomocí úložiště kontrolních bodů služby Azure Blob Storage v javascriptové aplikaci. Provádí kontrolní body metadat u přijatých zpráv v pravidelných intervalech v objektu blob služby Azure Storage. Tento přístup usnadňuje pozdější přijímání zpráv z místa, kde jste skončili.

Při použití služby Azure Blob Storage jako úložiště kontrolních bodů postupujte podle těchto doporučení:

  • Pro každou skupinu příjemců použijte samostatný kontejner. Můžete použít stejný účet úložiště, ale pro každou skupinu použít jeden kontejner.
  • Nepoužívejte účet úložiště pro nic jiného.
  • Nepoužívejte kontejner pro nic jiného.
  • Vytvořte účet úložiště ve stejné oblasti jako nasazená aplikace. Pokud je aplikace místní, zkuste zvolit nejbližší možnou oblast.

Na stránce účtu úložiště na webu Azure Portal v části Blob Service se ujistěte, že jsou zakázaná následující nastavení.

  • Hierarchický obor názvů
  • Dočasné smazání objektů blob
  • Verzování

Vytvořte účet úložiště Azure a blob kontejner

Vytvoření účtu úložiště Azure s kontejnerem objektů blob:

  1. Vytvoření účtu úložiště Azure
  2. Vytvořte kontejner blob v účtu úložiště
  3. Ověření v kontejneru blobů

Při místním vývoji se ujistěte, že uživatelský účet, který přistupuje k datům objektů blob, má správná oprávnění. Ke čtení a zápisu dat objektů blob potřebujete Přispěvatel dat objektů blob služby Storage . Abyste mohli tuto roli přiřadit sami sobě, musíte mít přiřazenou roli Správce uživatelských přístupů nebo jinou roli, která zahrnuje akci Microsoft.Authorization/roleAssignments/write . Role Azure RBAC můžete uživateli přiřadit pomocí webu Azure Portal, Azure CLI nebo Azure PowerShellu. Další informace najdete v tématu Vysvětlení rozsahu azure RBAC.

V tomto scénáři přiřadíte oprávnění ke svému uživatelskému účtu na úrovni účtu úložiště, abyste dodrželi princip nejnižších oprávnění. Tento postup poskytuje uživatelům jenom minimální potřebná oprávnění a vytváří bezpečnější produkční prostředí.

Následující příklad přiřadí roli Přispěvatel dat v objektech blob služby Storage k vašemu uživatelskému účtu, který poskytuje přístup ke čtení i zápisu k datům objektů blob v účtu úložiště.

Důležité

Ve většině případů trvá přiřazení role v Azure minutu nebo dvě. Ve výjimečných případech může trvat až osm minut. Pokud při prvním spuštění kódu dojde k chybám ověřování, chvíli počkejte a zkuste to znovu.

  1. Na webu Azure Portal vyhledejte svůj účet úložiště pomocí hlavního panelu hledání nebo levé navigace.

  2. Na stránce účtu úložiště v nabídce vlevo vyberte Řízení přístupu (IAM ).

  3. Na stránce Řízení přístupu (IAM) vyberte kartu Přiřazení rolí.

  4. V horní nabídce vyberte + Přidat . Poté vyberte Přidat přiřazení role.

    Snímek obrazovky znázorňující, jak přiřadit roli účtu úložiště

  5. Pomocí vyhledávacího pole vyfiltrujte výsledky podle požadované role. V tomto příkladu vyhledejte Přispěvatel dat pro úložiště Blob. Vyberte odpovídající výsledek a pak zvolte Další.

  6. V části Přiřadit přístup vyberte Uživatel, skupina nebo instanční objekt a pak zvolte + Vybrat členy.

  7. V dialogovém okně vyhledejte své uživatelské jméno Microsoft Entra (obvykle vaše user@domain e-mailová adresa) a pak v dolní části dialogového okna zvolte Vybrat .

  8. Výběrem možnosti Zkontrolovat a přiřadit přejděte na poslední stránku. Vyberte Zkontrolovat a přiřadit znovu pro dokončení procesu.

Instalace balíčků npm pro příjem událostí

Na straně příjmu je potřeba nainstalovat další dva balíčky. V tomto rychlém startu použijete azure Blob Storage k zachování kontrolních bodů, aby program nepřečetl události, které už četl. Provádí kontrolní body metadat u přijatých zpráv v pravidelných intervalech v objektu blob. Tento přístup usnadňuje pozdější přijímání zpráv z místa, kde jste skončili.

Spusťte tyto příkazy:

npm install @azure/storage-blob
npm install @azure/eventhubs-checkpointstore-blob
npm install @azure/identity

Psaní kódu pro příjem událostí

  1. Otevřete textový editor, například Visual Studio Code.

  2. Vytvořte soubor s názvem receive.js. Vložte do něj následující kód:

    V kódu použijte skutečné hodnoty k nahrazení následujících zástupných symbolů:

    • EVENT HUBS NAMESPACE NAME
    • EVENT HUB NAME
    • STORAGE ACCOUNT NAME
    • STORAGE CONTAINER NAME
    const { DefaultAzureCredential } = require("@azure/identity");
    const { EventHubConsumerClient, earliestEventPosition  } = require("@azure/event-hubs");
    const { ContainerClient } = require("@azure/storage-blob");    
    const { BlobCheckpointStore } = require("@azure/eventhubs-checkpointstore-blob");
    
    // Event hubs 
    const eventHubsResourceName = "EVENT HUBS NAMESPACE NAME";
    const fullyQualifiedNamespace = `${eventHubsResourceName}.servicebus.windows.net`; 
    const eventHubName = "EVENT HUB NAME";
    const consumerGroup = "$Default"; // name of the default consumer group
    
    // Azure Storage 
    const storageAccountName = "STORAGE ACCOUNT NAME";
    const storageContainerName = "STORAGE CONTAINER NAME";
    const baseUrl = `https://${storageAccountName}.blob.core.windows.net`;
    
    // Azure Identity - passwordless authentication
    const credential = new DefaultAzureCredential();
    
    async function main() {
    
      // Create a blob container client and a blob checkpoint store using the client.
      const containerClient = new ContainerClient(
        `${baseUrl}/${storageContainerName}`,
        credential
      );  
      const checkpointStore = new BlobCheckpointStore(containerClient);
    
      // Create a consumer client for the event hub by specifying the checkpoint store.
      const consumerClient = new EventHubConsumerClient(consumerGroup, fullyQualifiedNamespace, eventHubName, credential, checkpointStore);
    
      // Subscribe to the events, and specify handlers for processing the events and errors.
      const subscription = consumerClient.subscribe({
          processEvents: async (events, context) => {
            if (events.length === 0) {
              console.log(`No events received within wait time. Waiting for next interval`);
              return;
            }
    
            for (const event of events) {
              console.log(`Received event: '${event.body}' from partition: '${context.partitionId}' and consumer group: '${context.consumerGroup}'`);
            }
            // Update the checkpoint.
            await context.updateCheckpoint(events[events.length - 1]);
          },
    
          processError: async (err, context) => {
            console.log(`Error : ${err}`);
          }
        },
        { startPosition: earliestEventPosition }
      );
    
      // After 30 seconds, stop processing.
      await new Promise((resolve) => {
        setTimeout(async () => {
          await subscription.close();
          await consumerClient.close();
          resolve();
        }, 30000);
      });
    }
    
    main().catch((err) => {
      console.log("Error occurred: ", err);
    });
    
  3. Ke spuštění tohoto kódu použijte příkaz node receive.js. V okně se zobrazují zprávy o přijatých událostech.

    C:\Self Study\Event Hubs\JavaScript>node receive.js
    Received event: 'First event' from partition: '0' and consumer group: '$Default'
    Received event: 'Second event' from partition: '0' and consumer group: '$Default'
    Received event: 'Third event' from partition: '0' and consumer group: '$Default'
    

    Poznámka:

    Úplný zdrojový kód, včetně informačních komentářů, naleznete vreceiveEventsUsingCheckpointStore.js.

    Program příjemce přijímá události ze všech oddílů výchozí skupiny příjemců v centru událostí.

Vyčistěte zdroje

Odstraňte skupinu prostředků, která má obor názvů služby Event Hubs, nebo odstraňte pouze tento obor názvů, pokud chcete skupinu prostředků zachovat.