Üzenetek küldése egy Azure Service Bus-témakörbe, és üzenetek fogadása előfizetésekből a témakörbe (JavaScript)

Az oktatóanyagban az alábbi lépéseket fogja végrehajtani:

  1. Service Bus-névtér létrehozása az Azure Portal használatával.
  2. Service Bus-üzenettéma létrehozása az Azure Portal használatával.
  3. Service Bus-előfizetés létrehozása az üzenettémához az Azure Portal használatával.
  4. Írjon egy JavaScript-alkalmazást a @azure/service-bus csomag használatához:
    • Üzenetkészlet küldése a témakörbe.
    • Fogadja ezeket az üzeneteket az előfizetésből.

Feljegyzés

Ez a rövid útmutató részletes útmutatást nyújt egy egyszerű forgatókönyvhöz, amely során üzeneteket küldünk egy Service Bus-témakörbe, és fogadjuk ezeket az üzeneteket a témakör egy előfizetéséből. Az Azure Service Bus előre elkészített JavaScript- és TypeScript-mintáit a GitHub Azure SDK for JavaScript-adattárában találja.

Előfeltételek

Ha ezt a rövid útmutatót saját Azure-fiókjával szeretné használni, a következőkre van szüksége:

  • Telepítse az Azure CLI-t, amely jelszó nélküli hitelesítést biztosít a fejlesztői gép számára.
  • Jelentkezzen be azure-fiókjával a terminálon vagy a parancssorban a következővel az login: .
  • Használja ugyanazt a fiókot, amikor hozzáadja a megfelelő szerepkört az erőforráshoz.
  • Futtassa a kódot ugyanabban a terminálban vagy parancssorban.
  • Jegyezze fel a Service Bus-névtér témakörnevét és előfizetését . Erre szüksége lesz a kódban.

Feljegyzés

Névtér létrehozása az Azure Portalon

A Service Bus-üzenetküldési entitások Azure-ban való használatának megkezdéséhez először létre kell hoznia egy, az Azure-ban egyedi névvel rendelkező névteret. A névtér egy hatókör-tárolót biztosít a Service Bus-erőforrásokhoz (üzenetsorokhoz, témakörökhöz stb.) az alkalmazásban.

Névtér létrehozása:

  1. Jelentkezzen be az Azure Portalra.

  2. Lépjen a Minden szolgáltatás lapra.

  3. A bal oldali navigációs sávon válassza az Integráció lehetőséget a kategóriák listájából, vigye az egérmutatót a Service Bus fölé, majd válassza a + Service Bus csempén található gombot.

    Image showing selection of Create a resource, Integration, and then Service Bus in the menu.

  4. A Névtér létrehozása lap Alapszintű címkéjében kövesse az alábbi lépéseket:

    1. Előfizetés esetén válassza ki azt az Azure-előfizetést, amelyben létre szeretné hozni a névteret.

    2. Erőforráscsoport esetén válasszon ki egy meglévő erőforráscsoportot, amelyben a névtér él, vagy hozzon létre egy újat.

    3. Adja meg a névtér nevét. A névtér nevének meg kell felelnie a következő elnevezési konvencióknak:

      • A névnek egyedinek kell lennie az Azure-ban. A rendszer azonnal ellenőrzi, hogy a név elérhető-e.
      • A név hossza legalább 6 és legfeljebb 50 karakter lehet.
      • A név csak betűket, számokat, "-" kötőjeleket tartalmazhat.
      • A névnek betűvel kell kezdődnie, és betűvel vagy számmal kell végződnie.
      • A név nem "-sb" vagy "-mgmt" végződésű.
    4. A Hely területen válassza ki azt a régiót, amelyben a névteret üzemeltetni kell.

    5. Tarifacsomag esetén válassza ki a névtérhez tartozó tarifacsomagot (Alapszintű, Standard vagy Prémium). Ebben a rövid útmutatóban válassza a Standard lehetőséget.

      Fontos

      Ha témaköröket és előfizetéseket szeretne használni, válassza a Standard vagy a Premium lehetőséget. Az alapszintű tarifacsomag nem támogatja a témaköröket/előfizetéseket.

      Ha a Prémium tarifacsomagot választotta, adja meg az üzenetkezelési egységek számát. A prémium szint erőforrás-elkülönítést biztosít a CPU és a memória szintjén, így minden számítási feladat külön fut. Ennek az erőforrás-tárolónak a neve üzenetkezelési egység. A prémium szintű névtér legalább egy üzenetkezelési egységgel rendelkezik. Minden Service Bus Premium-névtérhez választhat 1, 2, 4, 8 vagy 16 üzenetkezelési egységet. További információ: Service Bus Premium Messaging.

    6. Válassza a Véleményezés + létrehozás lehetőséget a lap alján.

      Image showing the Create a namespace page

    7. A Véleményezés + létrehozás lapon tekintse át a beállításokat, és válassza a Létrehozás lehetőséget.

  5. Miután az erőforrás üzembe helyezése sikeres volt, válassza az Erőforrás megnyitása lehetőséget az üzembe helyezési lapon.

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

  6. Megjelenik a service bus-névtér kezdőlapja.

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

Üzenettéma létrehozása az Azure Portal használatával

  1. A Service Bus Névtér lapján válassza a bal oldali menü Témakörök elemét.

  2. Válassza a + Témakör lehetőséget az eszköztáron.

  3. Adja meg a témakör nevét. A többi beállítást hagyja az alapértelmezett értékükön.

  4. Válassza a Létrehozás lehetőséget.

    Image showing the Create topic page.

Előfizetés létrehozása az üzenettémához

  1. Válassza ki az előző szakaszban létrehozott témakört .

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

  2. A Service Bus-témakör lapján válassza az eszköztár + Előfizetés lehetőséget.

    Image showing the Add subscription button.

  3. Az Előfizetés létrehozása lapon kövesse az alábbi lépéseket:

    1. Írja be az S1 nevet az előfizetéshez.

    2. Adja meg a 3 értéket a maximális szállítási számhoz.

    3. Ezután válassza a Létrehozás lehetőséget az előfizetés létrehozásához.

      Image showing the Create subscription page.

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

Ez a rövid útmutató az Azure Service Bushoz való csatlakozás két módját mutatja be: jelszó nélküli és kapcsolati sztring.

Az első lehetőség bemutatja, hogyan használhatja a biztonsági tagot a Microsoft Entra-azonosítóban és a szerepköralapú hozzáférés-vezérlésben (RBAC) a Service Bus-névtérhez való csatlakozáshoz. 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 keményen kódolt kapcsolati sztring kell lennie.

A második lehetőség bemutatja, hogyan csatlakozhat egy Service Bus-névtérhez egy kapcsolati sztring. 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 Service Bushoz 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 Service Bus 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 Service Bus Data Owner felhasználói fiókjához, amely teljes hozzáférést biztosít az Azure Service Bus-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 Service Bushoz

Az Azure Service Bus 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-modell használatával. Az Azure az alábbi beépített Azure-szerepköröket biztosítja a Service Bus-névtérhez való hozzáférés engedélyezéséhez:

  • Azure Service Bus-adattulajdonos: Lehetővé teszi a Service Bus-névtérhez és annak entitásaihoz (üzenetsorokhoz, témakörökhöz, előfizetésekhez és szűrőkhöz) való adathozzáférést. A szerepkör egy tagja üzeneteket küldhet és fogadhat üzenetsorokból vagy témakörökből/előfizetésekből.
  • Azure Service Bus-adatküldő: Ezzel a szerepkörrel hozzáférést adhat a Service Bus-névtérhez és annak entitásaihoz.
  • Azure Service Bus-adatfogadó: Ezzel a szerepkörrel hozzáférést adhat a Service Bus-névtérhez és annak entitásaihoz.

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

Microsoft Entra-felhasználó hozzáadása az Azure Service Bus tulajdonosi szerepköréhez

Adja hozzá a Microsoft Entra-felhasználónevet az Azure Service Bus-adattulajdonosi szerepkörhöz a Service Bus névtér szintjén. Lehetővé teszi, hogy a felhasználói fiók környezetében futó alkalmazások üzeneteket küldjenek egy üzenetsorba vagy egy témakörbe, és üzeneteket fogadhassanak egy üzenetsorból vagy egy témakör előfizetéséből.

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. Ha nem nyitotta meg a Service Bus Névtér lapját az Azure Portalon, keresse meg a Service Bus-névteret a fő keresősávon vagy a bal oldali navigációs sávon.

  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.

    A screenshot showing how to assign a role.

  5. A keresőmezővel szűrheti az eredményeket a kívánt szerepkörre. Ebben a példában keresse meg Azure Service Bus 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.

Csomag telepítése a Node Package Manager (NPM) használatával

  1. A Service Bushoz szükséges npm-csomag(ok) telepítéséhez nyisson meg egy parancssort, amely az elérési útján található npm , módosítsa a könyvtárat arra a mappára, ahol a mintákat szeretné használni, majd futtassa ezt a parancsot.

  2. Telepítse a következő csomagokat:

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

Üzenetek küldése egy üzenettémakörbe

Az alábbi mintakód bemutatja, hogyan küldhet üzeneteket egy Service Bus-témakörbe. Részletekért lásd a kód megjegyzéseit.

Be kell jelentkeznie az Azure CLI-vel az login ahhoz, hogy a helyi gép biztosítsa a kódban szükséges jelszó nélküli hitelesítést.

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

  2. Hozzon létre egy meghívott sendtotopic.js fájlt, és illessze be az alábbi kódot. Ez a kód üzenetet küld a témakörnek.

    Fontos

    A jelszó nélküli hitelesítő adatokat a DefaultAzureCredential biztosítja.

    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. Cserélje le <SERVICE BUS NAMESPACE CONNECTION STRING> a Service Bus-névtér kapcsolati sztring.

  4. Cserélje le <TOPIC NAME> a témakör nevére.

  5. Ezután futtassa a parancsot egy parancssorban a fájl végrehajtásához.

    node sendtotopic.js
    
  6. A következő kimenetnek kell megjelennie.

    Sent a batch of messages to the topic: mytopic
    

Üzenetek fogadása előfizetésből

Be kell jelentkeznie az Azure CLI-vel az login ahhoz, hogy a helyi gép biztosítsa a kódban szükséges jelszó nélküli hitelesítést.

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

  2. Hozzon létre egy receivefromsubscription.js nevű fájlt, és illessze be a következő kódot. Részletekért lásd a kód megjegyzéseit.

    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. Cserélje le <SERVICE BUS NAMESPACE CONNECTION STRING> a névtér kapcsolati sztring.

  4. Cserélje le <TOPIC NAME> a témakör nevére.

  5. Cserélje le <SUBSCRIPTION NAME> a témakör előfizetésének nevét.

  6. Ezután futtassa a parancsot egy parancssorban a fájl végrehajtásához.

    node receivefromsubscription.js
    

A következő kimenetnek kell megjelennie.

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

Az Azure Portalon keresse meg a Service Bus-névteret, váltson a témakörökre az alsó panelen, és válassza ki a témakört a témakör Service Bus-témakör lapjának megtekintéséhez. Ezen a lapon 10 bejövő és 10 kimenő üzenetnek kell megjelennie az Üzenetek diagramon.

Incoming and outgoing messages

Ha legközelebb csak a küldési alkalmazást futtatja, a Service Bus-témakör lapján 20 bejövő üzenet (10 új), de 10 kimenő üzenet jelenik meg.

Updated topic page

Ezen a lapon, ha kiválaszt egy előfizetést az alsó panelen, a Service Bus-előfizetés lapra jut. Ezen a lapon láthatja az aktív üzenetek számát, a kézbesíthetetlen üzenetek számát és egyebeket. Ebben a példában 10 aktív üzenet van, amelyeket még nem fogadott a fogadó.

Active message count

Hibaelhárítás

Ha hibaüzenetet kap a JavaScript-kód jelszó nélküli verziójának a szükséges jogcímekkel kapcsolatos futtatásakor, győződjön meg arról, hogy az Azure CLI-paranccsal jelentkezett be, az login és a megfelelő szerepkört alkalmazza a rendszer az Azure-felhasználói fiókjára.

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

Lépjen a Service Bus-névtérre az Azure Portalon, és az Azure Portalon a Törlés gombra kattintva törölje a névteret és a benne lévő üzenetsort.

Következő lépések

Tekintse meg a következő dokumentációt és mintákat: