Dela via


Snabbstart: Skicka händelser till eller ta emot händelser från händelsehubbar med hjälp av JavaScript

I den här snabbstarten får du lära dig hur du skickar händelser till och tar emot händelser från en händelsehubb med hjälp av npm-paketet @azure/event-hubs .

Om du inte har använt Azure Event Hubs tidigare kan du läsa Översikt över Event Hubs innan du börjar.

Förutsättningar

  • Microsoft Azure-prenumeration. Om du vill använda Azure-tjänster, inklusive Azure Event Hubs, behöver du en prenumeration. Om du inte har något Azure-konto registrerar du dig för en kostnadsfri utvärderingsversion.
  • Node.js LTS. Ladda ner den senaste LTS-versionen (Långtidsstöd).
  • Visual Studio Code (rekommenderas) eller någon annan integrerad utvecklingsmiljö (IDE).
  • Skapa ett Event Hubs-namnområde och en händelsehubb. Använd Azure-portalen för att skapa ett namnområde av typen Event Hubs Hämta de autentiseringsuppgifter för hantering som ditt program behöver för att kommunicera med händelsehubben. Mer information finns i Skapa en händelsehubb med Hjälp av Azure-portalen.

Installera npm-paket för att skicka händelser

Om du vill installera Node Package Manager-paketet (npm) för Event Hubs öppnar du ett kommandotolksfönster som har npm i sökvägen. Ändra katalogen till den mapp där du vill behålla dina exempel.

Kör följande kommandon:

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

Autentisera appen till Azure

Den här snabbstarten visar två sätt att ansluta till Azure Event Hubs:

  • Lösenordslös. Använd ditt säkerhetsobjekt i Microsoft Entra ID och rollbaserad åtkomstkontroll (RBAC) för att ansluta till Event Hubs-namnområdet. Du behöver inte bekymra dig om att ha hårdkodade anslutningssträngar i koden, i en konfigurationsfil eller i säker lagring som Azure Key Vault.
  • Anslutningssträng. Använd en anslutningssträng för att ansluta till ett Event Hubs-namnområde. Om du inte har använt Azure tidigare kan det vara enklare att följa anslutningssträng alternativet.

Vi rekommenderar att du använder det lösenordslösa alternativet i verkliga program och produktionsmiljöer. Mer information finns i Service Bus-autentisering och auktorisering och Lösenordslösa anslutningar för Azure-tjänster.

Tilldela roller till din Microsoft Entra-användare

När du utvecklar lokalt kontrollerar du att användarkontot som ansluter till Azure Event Hubs har rätt behörigheter. Du behöver rollen Azure Event Hubs-dataägare för att skicka och ta emot meddelanden. Om du vill tilldela dig själv den här rollen behöver du rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure Portal, Azure CLI eller Azure PowerShell. Mer information finns på sidan Förstå omfånget för Azure RBAC .

I följande exempel tilldelas Azure Event Hubs Data Owner rollen till ditt användarkonto, vilket ger fullständig åtkomst till Azure Event Hubs-resurser. I ett verkligt scenario följer du principen om lägsta behörighet för att ge användarna endast de minsta behörigheter som krävs för en säkrare produktionsmiljö.

Inbyggda Azure-roller för Azure Event Hubs

För Azure Event Hubs skyddas redan hanteringen av namnområden och alla relaterade resurser via Azure Portal och Azure-resurshanterings-API:et med hjälp av Azure RBAC-modellen. Azure tillhandahåller följande inbyggda roller för att auktorisera åtkomst till ett Event Hubs-namnområde:

Om du vill skapa en anpassad roll, läs Rättigheter som krävs för Event Hubs-åtgärder.

Viktigt!

I de flesta fall tar det en minut eller två för rolltilldelningen att spridas i Azure. I sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Leta upp event hubs-namnområdet i Azure Portal med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På översiktssidan väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn. Välj sedan Lägg till rolltilldelning.

    Skärmbild som visar hur du tilldelar en roll.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet, sök efter Azure Event Hubs Data Owner och välj resultatet som matchar. Välj sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn. Välj sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress). Välj Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan. Välj Granska och tilldela igen för att slutföra processen.

Skicka händelser

I det här avsnittet skapar du ett JavaScript-program som skickar händelser till en händelsehubb.

  1. Öppna en textredigerare, till exempel Visual Studio Code.

  2. Skapa en fil med namnet send.js. Klistra in följande kod i den:

    I koden använder du verkliga värden för att ersätta följande platshållare:

    • 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. Om du vill köra programmet använder du det här kommandot:

    node send.js
    

    Kommandot skickar en batch med tre händelser till din händelsehubb.

    Om du använder lösenordsfri autentisering (Microsoft Entra ID Rollbaserad åtkomstkontroll (RBAC)) kan du behöva logga in på Azure med kontot som du lade till i rollen som Azure Event Hubs-dataägare. Använd kommandot az login.

  4. I Azure-portalen kontrollerar du att händelsehubben tog emot meddelandena. Uppdatera diagrammet genom att uppdatera sidan. Det kan ta några sekunder innan det visar att meddelandena tas emot.

    Skärmbild som visar sidan Översikt där du kan kontrollera att händelsehubben tog emot meddelandet.

    Anmärkning

    Mer information och den fullständiga källkoden finns på sidan GitHub sendEvents.js.

Ta emot händelser

I det här avsnittet får du händelser från en händelsehubb med hjälp av ett Azure Blob Storage-kontrollpunktslager i ett JavaScript-program. Den utför metadatakontrollpunkter på mottagna meddelanden med jämna mellanrum i en Azure Storage-blob. Den här metoden gör det enkelt att fortsätta ta emot meddelanden senare där du slutade.

Följ dessa rekommendationer när du använder Azure Blob Storage som kontrollpunktslager:

  • Använd en separat container för varje konsumentgrupp. Du kan använda samma lagringskonto, men använda en container per grupp.
  • Använd inte lagringskontot för något annat.
  • Använd inte containern för något annat.
  • Skapa lagringskontot i samma region som det distribuerade programmet. Om programmet är installerat lokalt, försök att välja den region som är närmast.

På sidan Lagringskonto i Azure Portal i avsnittet Blob Service kontrollerar du att följande inställningar är inaktiverade.

  • Hierarkisk namnrymd
  • Mjuk borttagning av blob
  • Versionshantering

Skapa ett Azure Storage-konto och en blobcontainer

Så här skapar du ett Azure Storage-konto med en blobcontainer:

  1. Skapa ett Azure Storage-konto
  2. Skapa en blobcontainer i lagringskontot
  3. Autentisera sig mot blob-behållaren

När du utvecklar lokalt kontrollerar du att användarkontot som har åtkomst till blobdata har rätt behörigheter. Du behöver Storage Blob Data Contributor för att läsa och skriva blobdata. Om du vill tilldela dig själv den här rollen måste du tilldelas rollen Administratör för användaråtkomst eller en annan roll som innehåller åtgärden Microsoft.Authorization/roleAssignments/write . Du kan tilldela Azure RBAC-roller till en användare med hjälp av Azure Portal, Azure CLI eller Azure PowerShell. Mer information finns i Förstå omfånget för Azure RBAC.

I det här scenariot tilldelar du behörigheter till ditt användarkonto, begränsat till lagringskontot, för att följa principen om minsta behörighet. Den här metoden ger användarna endast de minsta behörigheter som krävs och skapar säkrare produktionsmiljöer.

I följande exempel tilldelas rollen Storage Blob Data Contributor till ditt användarkonto, vilket ger både läs- och skrivåtkomst till blobdata i ditt lagringskonto.

Viktigt!

I de flesta fall tar det en minut eller två för rolltilldelningen att spridas i Azure. I sällsynta fall kan det ta upp till åtta minuter. Om du får autentiseringsfel när du först kör koden väntar du en stund och försöker igen.

  1. Leta upp ditt lagringskonto i Azure Portal med hjälp av huvudsökfältet eller det vänstra navigeringsfältet.

  2. På sidan lagringskonto väljer du Åtkomstkontroll (IAM) på den vänstra menyn.

  3. På sidan Åtkomstkontroll (IAM) väljer du fliken Rolltilldelningar .

  4. Välj + Lägg till på den översta menyn. Välj sedan Lägg till rolltilldelning.

    Skärmbild som visar hur du tilldelar en lagringskontoroll.

  5. Använd sökrutan för att filtrera resultatet till önskad roll. I det här exemplet söker du efter Storage Blob Data-deltagare. Välj matchande resultat och välj sedan Nästa.

  6. Under Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn och sedan + Välj medlemmar.

  7. I dialogrutan söker du efter ditt Microsoft Entra-användarnamn (vanligtvis din user@domain e-postadress) och väljer sedan Välj längst ned i dialogrutan.

  8. Välj Granska + tilldela för att gå till den sista sidan. Välj Granska och tilldela igen för att slutföra processen.

Installera npm-paketen för att ta emot händelser

För mottagarsidan måste du installera ytterligare två paket. I den här snabbstarten använder du Azure Blob Storage för att spara kontrollpunkter så att programmet inte läser de händelser som det redan har läst. Den utför metadatakontrollpunkter på mottagna meddelanden med jämna mellanrum i en blob. Den här metoden gör det enkelt att fortsätta ta emot meddelanden senare där du slutade.

Kör följande kommandon:

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

Skriva kod för att ta emot händelser

  1. Öppna en textredigerare, till exempel Visual Studio Code.

  2. Skapa en fil med namnet receive.js. Klistra in följande kod i den:

    I koden använder du verkliga värden för att ersätta följande platshållare:

    • 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. Om du vill köra den här koden använder du kommandot node receive.js. Fönstret visar meddelanden om mottagna händelser.

    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'
    

    Anmärkning

    Fullständig källkod, inklusive informationskommentorer, finns ireceiveEventsUsingCheckpointStore.js.

    Mottagarprogrammet tar emot händelser från alla partitioner i standardkonsumentgruppen i händelsehubben.

Rensa resurser

Ta bort den resursgrupp som har Event Hubs-namnområdet eller ta bara bort namnområdet om du vill behålla resursgruppen.