Ü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:
- Service Bus-névtér létrehozása az Azure Portal használatával.
- Service Bus-üzenettéma létrehozása az Azure Portal használatával.
- Service Bus-előfizetés létrehozása az üzenettémához az Azure Portal használatával.
- Í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
- Azure-előfizetés. Az oktatóanyag elvégzéséhez egy Azure-fiókra lesz szüksége. Aktiválhatja MSDN-előfizetői előnyeit, vagy regisztrálhat egy ingyenes fiókot.
- Node.js LTS
- Kövesse a rövid útmutató lépéseit: Az Azure Portal használatával hozzon létre egy Service Bus-témakört és előfizetéseket a témakörhöz. Ehhez a rövid útmutatóhoz csak egy előfizetést fog használni.
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
- Ez az oktatóanyag olyan mintákkal működik, amelyeket a Nodejs használatával másolhat és futtathat. A Node.js-alkalmazások létrehozásával kapcsolatos utasításokért lásd : Node.js-alkalmazás létrehozása és üzembe helyezése Azure-webhelyen, vagy Node.js Cloud Service a Windows PowerShell használatával.
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:
Jelentkezzen be az Azure Portalra.
Lépjen a Minden szolgáltatás lapra.
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.
A Névtér létrehozása lap Alapszintű címkéjében kövesse az alábbi lépéseket:
Előfizetés esetén válassza ki azt az Azure-előfizetést, amelyben létre szeretné hozni a névteret.
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.
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ű.
A Hely területen válassza ki azt a régiót, amelyben a névteret üzemeltetni kell.
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.
Válassza a Véleményezés + létrehozás lehetőséget a lap alján.
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.
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.
Megjelenik a service bus-névtér kezdőlapja.
Üzenettéma létrehozása az Azure Portal használatával
A Service Bus Namespace lapon válassza a bal oldali menü Témakörök elemét .
Válassza a + Témakör lehetőséget az eszköztáron.
Adja meg a témakör nevét. A többi beállítást hagyja az alapértelmezett értékükön.
Válassza a Létrehozás lehetőséget.
Előfizetés létrehozása az üzenettémához
Válassza ki az előző szakaszban létrehozott témakört .
A Service Bus-témakör lapján válassza az eszköztár + Előfizetés lehetőséget.
Az Előfizetés létrehozása lapon kövesse az alábbi lépéseket:
Írja be az S1 nevet az előfizetéshez.
Adja meg a 3 értéket a maximális szállítási számhoz.
Ezután válassza a Létrehozás lehetőséget az előfizetés létrehozásához.
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-rendszergazdai 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.
Ha nem nyitotta meg a Service Bus Namespace lapot az Azure Portalon, keresse meg a Service Bus-névteret a fő keresősávon vagy a bal oldali navigációs sávon.
Az áttekintési lapon válassza a Hozzáférés-vezérlés (IAM) lehetőséget a bal oldali menüben.
A Hozzáférés-vezérlés (IAM) lapon válassza a Szerepkör-hozzárendelések lapot.
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 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.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.
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.
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
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.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.
Nyissa meg a kedvenc szerkesztőt, például a Visual Studio Code-ot
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); });
Cserélje le
<SERVICE BUS NAMESPACE CONNECTION STRING>
a Service Bus-névtér kapcsolati sztring.Cserélje le
<TOPIC NAME>
a témakör nevére.Ezután futtassa a parancsot egy parancssorban a fájl végrehajtásához.
node sendtotopic.js
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.
Nyissa meg a kedvenc szerkesztőt, például a Visual Studio Code-ot
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); });
Cserélje le
<SERVICE BUS NAMESPACE CONNECTION STRING>
a névtér kapcsolati sztring.Cserélje le
<TOPIC NAME>
a témakör nevére.Cserélje le
<SUBSCRIPTION NAME>
a témakör előfizetésének nevét.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.
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.
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ó.
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: