Rövid útmutató: Események küldése eseményközpontokba vagy események fogadása az eseményközpontokból JavaScript használatával

Ebben a rövid útmutatóban megtudhatja, hogyan küldhet eseményeket egy eseményközpontba, és hogyan fogadhat eseményeket az @azure/event-hubs npm csomag használatával.

Előfeltételek

Ha még nem ismerkedik az Azure Event Hubs szolgáltatásokkal, a rövid útmutató előtt tekintse meg az Event Hubs áttekintését .

A rövid útmutató elvégzéséhez a következő előfeltételekre van szüksége:

  • Microsoft Azure-előfizetés. Az Azure-szolgáltatások, köztük az Azure Event Hubs használatához előfizetésre van szükség. Ha nem rendelkezik meglévő Azure-fiókkal, regisztrálhat egy ingyenes próbaverzióra.
  • Node.js LTS-t. Töltse le a legújabb hosszú távú támogatási (LTS) verziót.
  • Visual Studio Code (ajánlott) vagy bármely más integrált fejlesztési környezet (IDE).
  • Hozzon létre egy Event Hubs-névteret és egy eseményközpontot. Első lépésként az Azure Portalon hozzon létre egy Event Hubs típusú névteret, és szerezze be az alkalmazása és az eseményközpont közötti kommunikációhoz szükséges felügyeleti hitelesítő adatokat. Névtér és eseményközpont létrehozásához kövesse az ebben a cikkben ismertetett eljárást.

NPM-csomagok telepítése események küldéséhez

Az Event Hubs node Csomagkezelő (npm) csomagjának telepítéséhez nyisson meg egy parancssort, amely az elérési útjában npm-et tartalmaz, módosítsa a könyvtárat arra a mappára, ahol a mintákat meg szeretné tartani.

Futtassa a következő parancsokat:

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

Az alkalmazás hitelesítése az Azure-ban

Ez a rövid útmutató az Azure Event Hubshoz való csatlakozás két módját mutatja be: jelszó nélküli és kapcsolati sztring. Az első lehetőség bemutatja, hogyan csatlakozhat egy Event Hubs-névtérhez a Microsoft Entra-azonosítóban és a szerepköralapú hozzáférés-vezérlésben (RBAC). Nem kell aggódnia amiatt, hogy a kódban, a konfigurációs fájlban vagy egy biztonságos tárolóban, például az Azure Key Vaultban található kapcsolati sztring. A második lehetőség bemutatja, hogyan lehet kapcsolati sztring csatlakozni egy Event Hubs-névtérhez. Ha még nem ismerkedik az Azure-sal, könnyebben követheti a kapcsolati sztring lehetőséget. A jelszó nélküli beállítást a valós alkalmazásokban és éles környezetekben javasoljuk. További információ: Hitelesítés és engedélyezés. A jelszó nélküli hitelesítésről az áttekintési oldalon olvashat bővebben.

Szerepkörök hozzárendelése a Microsoft Entra-felhasználóhoz

Helyi fejlesztéskor győződjön meg arról, hogy az Azure Event Hubshoz csatlakozó felhasználói fiók rendelkezik a megfelelő engedélyekkel. Az üzenetek küldéséhez és fogadásához szüksége lesz az Azure Event Hubs adattulajdonosi szerepkörére. A szerepkör hozzárendeléséhez szüksége lesz a Felhasználói hozzáférés Rendszergazda istrator szerepkörre, vagy egy másik szerepkörre, amely tartalmazza a Microsoft.Authorization/roleAssignments/write műveletet. Azure RBAC-szerepköröket rendelhet egy felhasználóhoz az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával. További információ a szerepkör-hozzárendelések elérhető hatóköreiről a hatókör áttekintési oldalán.

Az alábbi példa hozzárendeli a szerepkört a Azure Event Hubs Data Owner felhasználói fiókjához, amely teljes hozzáférést biztosít az Azure Event Hubs-erőforrásokhoz. Egy valós forgatókönyvben kövesse a Minimális jogosultság elvét, hogy a felhasználók csak a biztonságosabb éles környezethez szükséges minimális engedélyeket adják meg a felhasználóknak.

Azure beépített szerepkörök az Azure Event Hubshoz

Az Azure Event Hubs esetében a névterek és az összes kapcsolódó erőforrás kezelése az Azure Portalon és az Azure Resource Management API-val már védett az Azure RBAC-modellel. Az Azure az alábbi beépített Azure-szerepköröket biztosítja az Event Hubs-névtérhez való hozzáférés engedélyezéséhez:

  • Azure Event Hubs-adattulajdonos: Adathozzáférést tesz lehetővé az Event Hubs-névtérhez és annak entitásaihoz (üzenetsorokhoz, témakörökhöz, előfizetésekhez és szűrőkhöz)
  • Azure Event Hubs-adatküldő: Ezzel a szerepkörrel hozzáférést adhat a feladónak az Event Hubs-névtérhez és annak entitásaihoz.
  • Azure Event Hubs-adat fogadó: Ezzel a szerepkörrel hozzáférést adhat a fogadónak az Event Hubs-névtérhez és annak entitásaihoz.

Ha egyéni szerepkört szeretne létrehozni, tekintse meg az Event Hubs-műveletekhez szükséges jogosultságokat.

Fontos

A legtöbb esetben egy-két percig tart, amíg a szerepkör-hozzárendelés propagálása az Azure-ban megtörténik. Ritkán akár nyolc percig is eltarthat. Ha hitelesítési hibákat kap a kód első futtatásakor, várjon néhány percet, és próbálkozzon újra.

  1. Az Azure Portalon keresse meg az Event Hubs-névteret a fő keresősáv vagy a bal oldali navigációs sáv használatával.

  2. Az áttekintési lapon válassza a Hozzáférés-vezérlés (IAM) lehetőséget a bal oldali menüben.

  3. A Hozzáférés-vezérlés (IAM) lapon válassza a Szerepkör-hozzárendelések lapot.

  4. Válassza a +Hozzáadás lehetőséget a felső menüből, majd a szerepkör-hozzárendelés hozzáadása lehetőséget az eredményül kapott legördülő menüből.

    Képernyőkép egy szerepkör hozzárendeléséről.

  5. A keresőmezővel szűrheti az eredményeket a kívánt szerepkörre. Ebben a példában keresse meg Azure Event Hubs Data Owner és válassza ki az egyező eredményt. Ezután válassza a Tovább gombot.

  6. A Hozzáférés hozzárendelése területen válassza a Felhasználó, csoport vagy szolgáltatásnév lehetőséget, majd válassza a + Tagok kijelölése lehetőséget.

  7. A párbeszédpanelen keresse meg a Microsoft Entra-felhasználónevet (általában a user@domain e-mail-címét), majd válassza a Párbeszédpanel alján található Kiválasztás lehetőséget.

  8. Válassza a Véleményezés + hozzárendelés lehetőséget a végső lapra való ugráshoz, majd a folyamat befejezéséhez a Véleményezés + hozzárendelés lehetőséget.

Események küldése

Ebben a szakaszban egy JavaScript-alkalmazást hoz létre, amely eseményeket küld egy eseményközpontba.

  1. Nyissa meg a kedvenc szerkesztőt, például a Visual Studio Code-ot.

  2. Hozzon létre egy send.js nevű fájlt, és illessze be a következő kódot:

    A kódban valós értékekkel cserélje le a következő helyőrzőket:

    • 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. Futtassa node send.js a fájlt. Ez a parancs három eseményből álló köteget küld az eseményközpontba. Ha jelszó nélküli (az Azure Active Directory szerepköralapú hozzáférés-vezérlési) hitelesítését használja, érdemes lehet futtatnia az login és bejelentkeznie az Azure-ba az Azure Event Hubs-adattulajdonosi szerepkörhöz hozzáadott fiókkal.

  4. Az Azure Portalon ellenőrizze, hogy az eseményközpont megkapta-e az üzeneteket. Frissítse a lapot a diagram frissítéséhez. Eltarthat néhány másodpercig, hogy megjelenjen az üzenetek fogadása.

    Ellenőrizze, hogy az eseményközpont megkapta-e az üzeneteket

    Feljegyzés

    A teljes forráskódért, beleértve a további tájékoztató megjegyzéseket, lépjen a GitHub sendEvents.js lapjára.

Események fogadása

Ebben a szakaszban eseményeket fog kapni egy eseményközpontból egy JavaScript-alkalmazásban található Azure Blob Storage ellenőrzőpont-tár használatával. Metaadat-ellenőrzőpontokat végez a fogadott üzeneteken rendszeres időközönként egy Azure Storage-blobban. Ez a megközelítés megkönnyíti az üzenetek fogadását később, ahonnan abbahagyta.

Kövesse az alábbi javaslatokat az Azure Blob Storage ellenőrzőpont-tárolóként való használatakor:

  • Minden fogyasztói csoporthoz használjon külön tárolót. Használhatja ugyanazt a tárfiókot, de csoportonként egy tárolót.
  • Ne használja a tárolót semmi máshoz, és ne használja a tárfiókot semmi máshoz.
  • A tárfióknak ugyanabban a régióban kell lennie, amelyben az üzembe helyezett alkalmazás található. Ha az alkalmazás helyszíni, próbálja meg kiválasztani a lehető legközelebbi régiót.

Az Azure Portal Tárfiók lapján, a Blob szolgáltatás szakaszában győződjön meg arról, hogy a következő beállítások le vannak tiltva.

  • Hierarchikus névtér
  • Blob áltörlése
  • Verziókezelés

Azure Storage-fiók és blobtároló létrehozása

Azure Storage-fiók és blobtároló létrehozásához hajtsa végre a következő műveleteket:

  1. Azure Storage-fiók létrehozása
  2. Blobtároló létrehozása a tárfiókban
  3. Hitelesítés a blobtárolóban

Helyi fejlesztéskor győződjön meg arról, hogy a blobadatokhoz hozzáférő felhasználói fiók rendelkezik a megfelelő engedélyekkel. A blobadatok olvasásához és írásához tárolóblobadatok közreműködője szükséges. A szerepkör hozzárendeléséhez hozzá kell rendelnie a Felhasználói hozzáférés Rendszergazda istrator szerepkört, vagy egy másik szerepkört, amely tartalmazza a Microsoft.Authorization/roleAssignments/write műveletet. Azure RBAC-szerepköröket rendelhet egy felhasználóhoz az Azure Portal, az Azure CLI vagy az Azure PowerShell használatával. A szerepkör-hozzárendelések elérhető hatóköreiről a hatókör áttekintési oldalán tudhat meg többet.

Ebben a forgatókönyvben engedélyeket rendel hozzá a felhasználói fiókjához, amely a tárfiókra terjed ki, hogy kövesse a minimális jogosultság elvét. Ez a gyakorlat csak a minimálisan szükséges engedélyeket biztosítja a felhasználóknak, és biztonságosabb éles környezeteket hoz létre.

Az alábbi példa a Storage Blob Data Contributor szerepkört rendeli hozzá a felhasználói fiókjához, amely olvasási és írási hozzáférést biztosít a tárfiók blobadataihoz.

Fontos

A szerepkör-hozzárendelés propagálása a legtöbb esetben egy-két percet vesz igénybe az Azure-ban, de ritkán akár nyolc percet is igénybe vehet. Ha hitelesítési hibákat kap a kód első futtatásakor, várjon néhány percet, és próbálkozzon újra.

  1. Az Azure Portalon keresse meg a tárfiókot a fő keresősávon vagy a bal oldali navigációs sávon.

  2. A tárfiók áttekintési lapján válassza a Hozzáférés-vezérlés (IAM) lehetőséget a bal oldali menüben.

  3. A Hozzáférés-vezérlés (IAM) lapon válassza a Szerepkör-hozzárendelések lapot.

  4. Válassza a +Hozzáadás lehetőséget a felső menüből, majd a szerepkör-hozzárendelés hozzáadása lehetőséget az eredményül kapott legördülő menüből.

    Képernyőkép a tárfiók-szerepkörök hozzárendeléséről.

  5. A keresőmezővel szűrheti az eredményeket a kívánt szerepkörre. Ebben a példában keresse meg a Storage Blob-adatszolgáltatót, és válassza ki a megfelelő eredményt, majd válassza a Tovább gombot.

  6. A Hozzáférés hozzárendelése területen válassza a Felhasználó, csoport vagy szolgáltatásnév lehetőséget, majd válassza a + Tagok kijelölése lehetőséget.

  7. A párbeszédpanelen keresse meg a Microsoft Entra-felhasználónevet (általában a user@domain e-mail-címét), majd válassza a Párbeszédpanel alján található Kiválasztás lehetőséget.

  8. Válassza a Véleményezés + hozzárendelés lehetőséget a végső lapra való ugráshoz, majd a folyamat befejezéséhez a Véleményezés + hozzárendelés lehetőséget.

Az npm-csomagok telepítése események fogadásához

A fogadó oldalon további két csomagot kell telepítenie. Ebben a rövid útmutatóban az Azure Blob Storage használatával őrizheti meg az ellenőrzőpontokat, hogy a program ne olvassa el a már beolvasott eseményeket. Metaadat-ellenőrző pontokat végez a fogadott üzeneteken egy blobban rendszeres időközönként. Ez a megközelítés megkönnyíti az üzenetek fogadását később, ahonnan abbahagyta.

Futtassa a következő parancsokat:

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

Kód írása események fogadásához

  1. Nyissa meg a kedvenc szerkesztőt, például a Visual Studio Code-ot.

  2. Hozzon létre egy receive.js nevű fájlt, és illessze be a következő kódot:

    A kódban valós értékekkel cserélje le a következő helyőrzőket:

    • 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. Futtassa node receive.js a parancssort a fájl végrehajtásához. Az ablakban meg kell jeleníteni a fogadott eseményekről szóló üzeneteket.

    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'
    

    Feljegyzés

    A teljes forráskódért, beleértve a további tájékoztató megjegyzéseket, lépjen a GitHub receiveEventsUsingCheckpointStore.js lapjára.

    A fogadó program az eseményközpont alapértelmezett fogyasztói csoportjának összes partíciójáról fogad eseményeket.

Az erőforrások eltávolítása

Törölje az Event Hubs-névteret tartalmazó erőforráscsoportot, vagy ha meg szeretné tartani az erőforráscsoportot, törölje csak a névteret.

Tekintse meg ezeket a mintákat a GitHubon: