Gyakorlat – Tartós számláló hozzáadása hosszan futó tevékenység szabályozásához

Befejeződött

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.

  1. Jelentkezzen be az Azure Portalra ugyanazzal a fiókkal, amellyel a tesztkörnyezetet aktiválta.

  2. 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.

  3. 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.

  4. 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.

    1. 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
      
    2. 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.

  5. 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

  1. 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.

  2. Válassza a Függvények lapot a képernyő közepén.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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

  1. 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.

  2. Válassza a Függvények lapot a képernyő közepén.

  3. Válassza ki az előző gyakorlatban létrehozott OrchFunction függvényt. Megjelenik az OrchFunction függvénypanel.

  4. 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.

  5. Adja hozzá a következő hivatkozást a pillanattárhoz .

    const moment = require("moment");
    
  6. 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.

  7. A felső menüsávon válassza a Mentés lehetőséget.

A Durable Functions-munkafolyamat elindulásának ellenőrzése

  1. 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.

  2. 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.

  3. Válassza a Függvények lapot a képernyő közepén.

  4. Válassza ki a HttpStart függvényt. Megjelenik a HttpStart panel.

  5. 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.

  6. 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/..."
    }
    
  7. 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"
    }
    
  8. 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"
    }