Gyakorlat – Tartós számláló hozzáadása hosszan futó tevékenység szabályozásához
A vállalat arra kérte, hogy egészítse ki új munkafolyamatát egy olyan eszkalációs lépéssel, amely akkor lép működésbe, ha a projekttervezetet nem hagyják időben jóvá.
Ebben a gyakorlatban a munkafolyamathoz hozzáadunk egy időzítőt, amellyel az időtúllépést vezérelhetjük a munkafolyamat futása közben. Ezentúl azt is megtanulhatja, hogyan használhatja az időtúllépést annak szabályozására, hogy melyik végrehajtási útvonalat válassza a munkafolyamat.
A moment npm-csomag hozzáadása a függvényalkalmazáshoz
Mielőtt módosítanánk a munkafolyamatot, a konzol használatával hozzáadjuk a moment npm-csomagot a függvényalkalmazáshoz.
Jelentkezzen be az Azure Portalra ugyanazzal a fiókkal, amellyel a tesztkörnyezetet aktiválta.
Az Azure Portal menüjében vagy a kezdőlapon, az Azure-szolgáltatások alatt válassza a Minden erőforrás lehetőséget, majd válassza ki az előző gyakorlatban létrehozott függvényalkalmazást. Megjelenik a Függvényalkalmazás panel.
A bal oldali menüsáv Fejlesztési eszközök csoportjában válassza a Konzol lehetőséget. Megjelenik a Konzol panel a függvényalkalmazáshoz.
Ellenőrizze, hogy megnyílik-e a konzolablak a C:\home\site\wwwroot mappában, majd futtassa a következő parancsokat a mintafüggvényalkalmazáshoz szükséges kódtárak telepítéséhez.
Futtassa a következő parancsot a TypeScript-kódtár telepítéséhez, amely a statikus gépeléshez szükséges függőség.
npm install typescript
Futtassa a következő parancsot a moment könyvtár telepítéséhez, amely a tartós függvényekkel használható dátum-/idő függvényeket tartalmazza.
npm install moment
Ezek a parancsok eltarthatnak néhány másodpercig, és a csomópontcsomag-kezelő figyelmeztetéseket jeleníthet meg, amelyeket figyelmen kívül hagyhat.
Várjon, amíg az összes csomag telepítése befejeződik, majd zárja be a konzolablakot.
Eszkalációs tevékenység hozzáadása a függvényalkalmazáshoz
Az Azure Portal menüjében vagy a kezdőlapon, az Azure-szolgáltatások alatt válassza a Minden erőforrás lehetőséget, majd válassza ki a függvényalkalmazást. Megjelenik a Függvényalkalmazás panel.
Válassza a Függvények lapot a képernyő közepén.
A Függvények lap menüsávjában válassza a Létrehozás lehetőséget. Megjelenik a Függvény létrehozása panel.
A Sablon kiválasztása csoportban a Szűrő mezőbe írja be a Durable Functions-tevékenységet, és válassza ki a sablont a listából. Ez a sablon létrehoz egy tartós függvényt, amely akkor fut, amikor egy tevékenységet vezénylő függvény hív meg.
A Sablon részletei területen az Új függvény mezőben adja meg a függvény eszkalációját, és válassza a Létrehozás lehetőséget. Megjelenik a függvény eszkalációs panelje.
A bal oldali menüpanel Fejlesztőeszközök csoportjában válassza a Kód + Teszt lehetőséget. Megjelenik a Függvény Kód + Teszt panelje.
Az index.js fájl kódja megjelenik a szerkesztőben.
Cserélje le a meglévő kódot az alábbira:
module.exports = async function (context) { return `ESCALATION : You have not approved the project design proposal - reassigning to your Manager! ${context.bindings.name}!`; };
A kód egy üzenetet ad vissza, amely azt jelzi, hogy a munkafolyamat eszkalálódott. Éles üzemű rendszernél a függvény olyan logikát is tartalmazna, amely emlékeztetőt küldene a címzettnek, vagy másik személyhez rendelné hozzá a feladatot.
A felső menüsávon válassza a Mentés lehetőséget az új függvény mentéséhez.
A vezénylési függvény frissítése az eszkalációs függvény használatára
Az Azure Portal menüjében vagy a kezdőlapon, az Azure-szolgáltatások alatt válassza a Minden erőforrás lehetőséget, majd válassza ki a függvényalkalmazást. Megjelenik a Függvényalkalmazás panel.
Válassza a Függvények lapot a képernyő közepén.
Válassza ki az előző gyakorlatban létrehozott OrchFunction függvényt. Megjelenik az OrchFunction függvénypanel.
A bal oldali menüpanel Fejlesztőeszközök csoportjában válassza a Kód + Teszt lehetőséget. Megjelenik a Függvény Kód + Teszt panelje.
Az index.js fájl kódja megjelenik a szerkesztőben.
Adja hozzá a következő hivatkozást a pillanattárhoz .
const moment = require("moment");
Cserélje le a függvény törzsét a következő kódra, amely ellenőrzi, hogy a jóváhagyási határidő lejárt-e.
module.exports = df.orchestrator(function* (context) { const outputs = []; const deadline = moment.utc(context.df.currentUtcDateTime).add(20, "s"); const activityTask = context.df.waitForExternalEvent("Approval"); const timeoutTask = context.df.createTimer(deadline.toDate()); const winner = yield context.df.Task.any([activityTask, timeoutTask]); if (winner === activityTask) { outputs.push(yield context.df.callActivity("Approval", "Approved")); } else { outputs.push(yield context.df.callActivity("Escalation", "Head of department")); } if (!timeoutTask.isCompleted) { // All pending timers must be complete or canceled before the function exits. timeoutTask.cancel(); } return outputs; });
Annak érdekében, hogy a gyakorlat futtatása ne vegyen igénybe túl sok időt, ha az Approval függvény nem válaszol 20 másodpercen belül, az Escalation függvény kerül meghívásra. A kód módosítja az Approval függvényhívást is, hogy az várakozzon amíg egy külső bemenetet nem kap. Így szabályozhatjuk, hogy a válasz mikor érkezik vissza tesztelési célokra.
A felső menüsávon válassza a Mentés lehetőséget.
A Durable Functions-munkafolyamat elindulásának ellenőrzése
Az Azure Portal menüjében vagy a kezdőlapon, az Azure-szolgáltatások alatt válassza a Minden erőforrás lehetőséget, majd válassza ki a függvényalkalmazást. Megjelenik a Függvényalkalmazás panel.
Az Áttekintés panel felső menüsávján válassza az Újraindítás lehetőséget, majd válassza az Igen lehetőséget, amikor a rendszer kéri az újraindítást. A folytatás előtt várja meg, amíg az újraindítás befejeződik. Újra megjelenik a függvényalkalmazás panelje.
Válassza a Függvények lapot a képernyő közepén.
Válassza ki a HttpStart függvényt. Megjelenik a HttpStart panel.
A felső menüsávon válassza a Függvény URL-címének lekérése lehetőséget, és másolja ki az URL-címet. Az URL-címnek az alábbi példához hasonlónak kell lennie:
https://example.azurewebsites.net/api/orchestrators/{functionName}?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
Az URL-cím segítségével futtathatja a függvényeket.
Nyisson meg egy új böngészőablakot, és keresse meg a másolt URL-címet. Az URL-címben írja felül a {functionName} helyőrzőt a OrchFunction névvel, az alábbi példához hasonlóan:
https://example.azurewebsites.net/api/orchestrators/OrchFunction?code=AbCdEfGhIjKlMnOpQrStUvWxYz==
A válaszüzenet URI-végpontok készletét fogja tartalmazni, amelyek a végrehajtás monitorozásához és szabályozásához használhatók fel hasonlóan a következő példához:
{ "id": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "statusQueryGetUri": "https://example.azurewebsites.net/...", "sendEventPostUri": "https://example.azurewebsites.net/...", "terminatePostUri": "https://example.azurewebsites.net/...", "rewindPostUri": "https://example.azurewebsites.net/...", "purgeHistoryDeleteUri": "https://example.azurewebsites.net/..." }
Másolja ki a statusQueryGetUri értéket, és használja a webböngészőt az ADOTT URL-címre való navigáláshoz. Látnia kell egy válaszüzenetet, amely futásként jeleníti meg az állapotot, amíg az időzítő 20 másodpercig vár, és ennek az alábbi példához hasonlóan kell kinéznie:
{ "name": "OrchFunction", "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "runtimeStatus": "Running", "input": null, "customStatus": null, "output": null, "createdTime": "2019-04-14T13:17:26Z", "lastUpdatedTime": "2019-04-14T13:17:27Z" }
Várjon 20 másodpercig, és frissítse a böngészőablakot. Az időtúllépés el lesz érve, és a munkafolyamat meghívja az Eszkalálási tevékenységet. A következő példához hasonló választ fog látni:
{ "name": "OrchFunction", "instanceId": "f0e1d2c3b4a5968778695a4b3c2d1e0f", "runtimeStatus": "Completed", "input": null, "customStatus": null, "output": [ "ESCALATION : You have not approved the project design proposal - reassigning to your Manager! Head of department!" ], "createdTime": "2019-04-14T13:43:09Z", "lastUpdatedTime": "2019-04-14T13:43:31Z" }