Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A módosítások vezénylési logikában való üzembe helyezése kulcsfontosságú szempont a tartós vezénylési rendszerek használatakor. Ha egy orkesztráció megszakad, és később folytatódik (például egy gazdagép frissítése során), a futtatókörnyezet visszajátssza az orkesztráció eseményeit, biztosítva, hogy az összes korábbi lépés sikeresen végrehajtásra kerüljön a következő lépés megtétele előtt. Ha a vezénylési kód módosult az üzembe helyezések között, előfordulhat, hogy a végrehajtandó lépések már nem ugyanazok. Ebben az esetben a rendszer nemdeterminista hibát jelez ahelyett, hogy engedélyezi a vezénylés folytatását.
A vezénylési verziószámozás megakadályozza a nemdeterminizmussal kapcsolatos problémákat, így zökkenőmentesen dolgozhat új (vagy régi) vezénylésekkel, miközben fenntarthatja a tartós vezénylések által megkövetelt determinisztikus végrehajtási modellt.
Ez a beépített funkció minimális konfigurációval biztosítja az automatikus verzióelkülönítést. Független a háttérrendszertől, így bármely alkalmazás, amely a Durable Functions bármelyik tároló szolgáltatót használja, beleértve a Durable Task Schedulert is, használhatja.
A Durable Task SDK-k két verziószámozási stílust támogatnak, amelyeket külön vagy együttesen is használhat:
- Ügyfél-/környezetalapú feltételes verziószámozás – állítson be egy verziót az ügyfél- és áglogikán a vezénylőben.
- Feldolgozóalapú verziószámozás – a feldolgozó döntse el, hogy mely vezénylési verziókat tudja feldolgozni.
Terminológia
Ez a cikk két kapcsolódó, de eltérő kifejezést használ:
- Orchestrator függvény (vagy egyszerűen "vezénylő"): A munkafolyamat logikáját meghatározó függvénykód – a munkafolyamat végrehajtásának sablonja vagy tervrajza.
- Vezénylési példány (vagy egyszerűen "vezénylés":Egy vezénylő függvény adott futó végrehajtása, saját állapotával, példányazonosítójával és bemeneteivel. Egyszerre több orkesztálási példány is futtatható ugyanabból az orkesztáló függvényből eredően.
Ennek a különbségnek a megértése elengedhetetlen a vezénylési verziószámozáshoz. A vezénylési függvény kódja verzióérzékeny logikát tartalmaz, míg a vezénylési példányok létrehozásakor a rendszer végleg egy adott verzióhoz társítja.
Hogyan működik?
A vezénylési verziószámozás az alábbi alapelveken működik:
- Verziótársítás: Ha létrehoz egy vezénylési példányt, a rendszer végleges verziót rendel hozzá.
- Verzióérzékeny végrehajtás: Az Orchestrator-kód megvizsgálja az aktuális vezénylési példányhoz társított verzióértéket, és ennek megfelelően ágakat futtat.
- Visszamenőleges kompatibilitás: Az újabb vezénylőverziókat futtató feldolgozók továbbra is végrehajtják a régebbi verziók által létrehozott vezénylési példányokat.
- Verziókompatibilitás védelem: A futtatókörnyezet megakadályozza, hogy a régebbi verziójú vezénylőket futtató dolgozók újabb verziók által indított vezényléseket hajtsanak végre.
A gyakorlatban beállít egy alapértelmezett verziósztringet az ügyfélen (vagy a host.json Durable Functions komponensen), és az orchestráló kód a context.Version használatával ágazik a régi és az új logika között.
Előfeltételek
A vezénylési verziószámozás használata előtt győződjön meg arról, hogy rendelkezik a programozási nyelvhez szükséges csomagverziókkal.
Ha non-.NET nyelvet (JavaScript, Python, PowerShell vagy Java) használ bővítménycsomagokkal, a függvényalkalmazásnak a Bővítménycsomag 4.30.0-s vagy újabb verziójára kell hivatkoznia. Konfigurálja a extensionBundle tartományt host.json úgy, hogy legalább a minimális verzió legyen 4.30.0. Például:
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.30.0, 5.0.0)"
}
}
A csomagverziók kiválasztásával és frissítésével kapcsolatos részletekért tekintse meg a bővítményköteg konfigurációs dokumentációját.
A nem .NET nyelvek bővítménycsomagra vonatkozó követelményén kívül az alább felsorolt nyelvspecifikus SDK-csomag minimális verzióját is használnia kell. A bővítménycsomag és az SDK-csomag is szükséges a vezénylési verziószámozás megfelelő működéséhez.
Használja Microsoft.Azure.Functions.Worker.Extensions.DurableTask1.14.0 vagy újabb verzióját.
Az alapértelmezett verzió beállítása
Az orchestration verziószámozás használatához először konfiguráljon egy alapértelmezett verziót az új orchestration példányokhoz.
Adja hozzá vagy frissítse a defaultVersion beállítást a Azure Functions projekt host.json fájljában:
{
"extensions": {
"durableTask": {
"defaultVersion": "<version>"
}
}
}
A verziósztring bármilyen, a verziószámozási stratégiának megfelelő formátumot követhet:
- Többrészes verziószámozás:
"1.0.0","2.1.0" - Egyszerű számozás:
"1","2" - Dátumalapú:
"2025-01-01" - Egyéni formátum:
"v1.0-release"
A defaultVersion beállítása után az összes új vezénylési példány véglegesen ehhez a verzióhoz lesz rendelve.
Az alkalmazás konfigurálásakor állítsa be az alapértelmezett verziót az ügyfélszerkesztőben.
Megjegyzés:
Az .NET SDK-ban (Microsoft.DurableTask.Client.AzureManaged) érhető el az 1.9.0-s verzió óta.
builder.Services.AddDurableTaskClient(builder =>
{
builder.UseDurableTaskScheduler(connectionString);
builder.UseDefaultVersion("1.0.0");
});
A verzió egy egyszerű sztring, és bármilyen értéket elfogad. Az SDK megpróbálja átalakítani .NET System.Version-é. Ha sikeres, a rendszer ezt a kódtárat használja az összehasonlításhoz. Ellenkező esetben egyszerű karakterlánc-összehasonlítást használ.
Miután beállította az alapértelmezett verziót az ügyfélen, az ügyfél által indított vezénylések véglegesen hozzá lesznek rendelve ehhez a verzióhoz. A verzió a vezénylési környezetben is elérhető, így feltételes utasításokban is használhatja.
Verzió-összehasonlító szabályok
Ha a Strict vagy CurrentOrOlder stratégia ki van választva (lásd: Verzióegyeztetés), a futtatókörnyezet összehasonlítja a vezénylési példány verzióját a defaultVersion értékével az alábbi szabályok szerint.
- Az üres vagy null verziók egyenlőként lesznek kezelve.
- Az üres vagy null értékű verzió minden definiált verziónál régebbinek minősül.
- Ha mindkét verzió numerikus (például
"1.0"és"2.0"), akkor verziószámként lesznek összehasonlítva, tehát"2.0"újabbak, mint"1.0"a . - Ellenkező esetben a kis- és nagybetűk érzéketlen sztring-összehasonlítását hajtja végre.
Az alábbi példák a verzió-összehasonlítás működését szemléltetik:
| Verzió A | B verzió | Result |
|---|---|---|
"1.0" |
"2.0" |
A régebbi |
null |
"1.0" |
A régebbi |
null |
null |
Egyenlő |
"v1-release" |
"v2-release" |
A a régebbi (betűrendes) |
Ha a Strict vagy CurrentOrOlder egyezési stratégiát választjuk ki (lásd Verzióegyezés), a verzió-összehasonlítás a nyelvtől függ.
-
.NET: Az SDK
System.Versionként próbálja elemezni a verziót. Ha mindkét értelmezés sikerül, az összehasonlítás aCompareTo-t használja. Ellenkező esetben az SDK sztring-összehasonlítást használ. -
Python: Az SDK
packaging.versionhasznál a szemantikai verziószámozás összehasonlításához. - Java: Az SDK a verziót egyszerű karakterláncként hasonlítja össze.
Verzióérzékeny vezénylőlogika
A verzióérzékeny logika implementálásához használja a kontextusparamétert az aktuális vezénylési példány verziójának és ághajtásának eléréséhez.
Fontos
A verzióérzékeny logika megvalósításakor kritikus fontosságú a régebbi verziók pontos vezénylő logikájának megőrzése. A meglévő verziók tevékenységhívásainak sorozatában, sorrendjében vagy aláírásában bekövetkezett változások megszakíthatják a determinisztikus visszajátszást, és a repülés közbeni vezénylések meghiúsulását vagy helytelen eredményeket eredményezhetnek. A régi verziókód elérési útjai változatlanok maradnak az üzembe helyezés után.
[Function("MyOrchestrator")]
public static async Task<string> RunOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
if (context.Version == "1.0")
{
// Original logic for version 1.0
...
}
else if (context.Version == "2.0")
{
// New logic for version 2.0
...
}
...
}
[DurableTask]
class HelloCities : TaskOrchestrator<string, List<string>>
{
private readonly string[] Cities = ["Seattle", "Amsterdam", "Hyderabad"];
public override async Task<List<string>> RunAsync(
TaskOrchestrationContext context, string input)
{
List<string> results = [];
foreach (var city in Cities)
{
results.Add(await context.CallSayHelloAsync($"{city} v{context.Version}"));
if (context.CompareVersionTo("2.0.0") >= 0)
{
results.Add(await context.CallSayGoodbyeAsync($"{city} v{context.Version}"));
}
}
return results;
}
}
Megjegyzés:
A context.Version tulajdonság írásvédett, és a létrehozáskor a vezénylési példányhoz véglegesen társított verziót tükrözi. Ez az érték nem módosítható a vezénylés végrehajtása során.
Jótanács
Ha már létrehozta a repülés közbeni vezényléseket az alapértelmezett verzió megadása előtt, context.Version null értéket (vagy nyelvfüggő megfelelőt) ad vissza ezekhez a példányokhoz. Strukturálja az orchestrátor logikáját az örökölt (null verzió) és az új verziójú vezénylések kezelésére.
Üzembe helyezési viselkedés
A frissített vezénylőfüggvény új verziólogikával való üzembe helyezésekor az alábbiakra számíthat:
- Feldolgozók együttélése: Az új vezénylő függvénykóddal rendelkező feldolgozók elindulnak, míg a régi kóddal rendelkező feldolgozók közül néhány még mindig aktív lehet.
-
Verzió-hozzárendelés új példányokhoz: Az új feldolgozók által létrehozott összes új vezénylés és alvezénylés a
defaultVersionverziót kapja meg. - Új feldolgozói kompatibilitás: Az új feldolgozók az újonnan létrehozott vezényléseket és a korábban meglévő vezényléseket is feldolgozhatják, mert a verzióérzékeny elágaztatási logika biztosítja a visszamenőleges kompatibilitást.
-
Régi feldolgozói korlátozások: A régi feldolgozók csak a saját
defaultVersionhost.jsonverziójukban megadott verzióval megegyező vagy annál alacsonyabb verziójú vezényléseket dolgozhatják fel, mert nem várható, hogy a vezénylőkód kompatibilis legyen az újabb verziókkal.
Megjegyzés:
A vezénylés verziószámozása nem befolyásolja a munkavégző életciklust. A Azure Functions platform az üzemeltetési modellektől függően rendszeres szabályok alapján kezeli a feldolgozók beállítását és leszerelését.
Példa: Tevékenység cseréje a sorrendben
Ez a példa bemutatja, hogyan helyettesíthet egy tevékenységet egy sorozat közepén vezényléses verziószámozással.
1.0-s verzió
host.json konfiguráció:
{
"extensions": {
"durableTask": {
"defaultVersion": "1.0"
}
}
}
Orchestrator függvény:
[Function("ProcessOrderOrchestrator")]
public static async Task<string> ProcessOrder(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
var orderId = context.GetInput<string>();
await context.CallActivityAsync("ValidateOrder", orderId);
await context.CallActivityAsync("ProcessPayment", orderId);
await context.CallActivityAsync("ShipOrder", orderId);
return "Order processed successfully";
}
2.0-s verzió kedvezményes feldolgozással
host.json konfiguráció:
{
"extensions": {
"durableTask": {
"defaultVersion": "2.0"
}
}
}
Orchestrator függvény:
[Function("ProcessOrderOrchestrator")]
public static async Task<string> ProcessOrder(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
var orderId = context.GetInput<string>();
await context.CallActivityAsync("ValidateOrder", orderId);
if (TaskOrchestrationVersioningUtils.CompareVersions(context.Version, "1.0") <= 0)
{
// Preserve original logic for existing instances
await context.CallActivityAsync("ProcessPayment", orderId);
}
else
{
// New logic with discount processing
await context.CallActivityAsync("ApplyDiscount", orderId);
await context.CallActivityAsync("ProcessPaymentWithDiscount", orderId);
}
await context.CallActivityAsync("ShipOrder", orderId);
return "Order processed successfully";
}
Verzióegyezés
A verzióegyeztetési stratégia határozza meg, hogy a vezénylési példányokat melyik munkafolyamat dolgozza fel a verziókompatibilitás alapján.
Az alábbi táblázat a rendelkezésre álló stratégiákat ismerteti:
| Stratégia | Leírás |
|---|---|
| Nincs | A munka feldolgozásakor nem veszi figyelembe a verziót. Minden munka feldolgozása verziótól függetlenül történik. |
| Szigorú | A vezénylési verziónak és a munkafolyamat verziójának pontosan meg kell egyeznie. |
| CurrentOrOlder | Az orchestratív verziónak egyenlőnek vagy kisebbnek kell lennie, mint a munkavégző verziója. Ez az alapértelmezett stratégia. |
Konfiguráció
{
"extensions": {
"durableTask": {
"defaultVersion": "<version>",
"versionMatchStrategy": "CurrentOrOlder"
}
}
}
-
None(nem ajánlott): Letiltja a verzióellenőrzést. Minden munkavégző folyamat bármilyen vezénylési példányt feldolgoz. -
Strict: Csak azokból a vezénylésekből dolgozza fel a feladatokat, amelyek pontosan ugyanazzal a verzióval rendelkeznek, mint adefaultVersion. Gondos üzembe helyezési koordinációt igényel az árva vezénylések elkerülése érdekében. -
CurrentOrOlder(alapértelmezett): Olyan verziójú vezénylések feladatait dolgozza fel, amely kisebb vagy egyenlődefaultVersion. Lehetővé teszi a visszamenőleges kompatibilitást, miközben megakadályozza, hogy az idősebb dolgozók újabb vezényléseket dolgozzanak fel.
Konfigurálja a egyeztetési stratégiát a feldolgozószerkesztőn keresztül.
Megjegyzés:
Az .NET SDK -ban (Microsoft.DurableTask.Worker.AzureManaged) érhető el az 1.9.0-s verzió óta.
builder.Services.AddDurableTaskWorker(builder =>
{
builder.AddTasks(r => r.AddAllGeneratedTasks());
builder.UseDurableTaskScheduler(connectionString);
builder.UseVersioning(new DurableTaskWorkerOptions.VersioningOptions
{
Version = "1.0.0",
DefaultVersion = "1.0.0",
MatchStrategy = DurableTaskWorkerOptions.VersionMatchStrategy.Strict,
FailureStrategy = DurableTaskWorkerOptions.VersionFailureStrategy.Reject,
});
});
Verzióeltérés kezelése
A verzió-eltérések kezelési stratégiája határozza meg, mi történik, ha egy vezénylési példány verziója nem egyezik meg a végrehajtó verziójával.
Az alábbi táblázat a rendelkezésre álló stratégiákat ismerteti:
| Stratégia | Leírás |
|---|---|
| Elutasít | A vezénylés elutasításra kerül, és visszakerül a munkasorba. Később egy másik munkás is megkísérelheti. Ez a stratégia az alapértelmezett. |
| Fail | A vezénylés sikertelen volt, és eltávolították a munkasorból. |
Konfiguráció
{
"extensions": {
"durableTask": {
"defaultVersion": "<version>",
"versionFailureStrategy": "Reject"
}
}
}
-
Reject(alapértelmezett): A vezénylési példány a jelenlegi állapotában marad, és később újrapróbálható, amikor egy kompatibilis feldolgozó elérhetővé válik. Ez a stratégia a legbiztonságosabb megoldás, mert megőrzi a vezénylés állapotát. -
Fail: Azonnal leállítja a vezénylési példányt meghibásodási állapottal. Ez a beállítás akkor lehet megfelelő, ha a verzióeltérések súlyos üzembe helyezési problémákat jeleznek.
Mikor érdemes használni az egyes stratégiákat?
Elutasítás: Ezt a stratégiát akkor használja, ha szeretné, hogy az orchesztráció később vagy egy másik feldolgozón újra próbálkozhasson.
Reject Hiba esetén:
- A vezénylés elutasításra kerül, és visszakerül a munkasorba.
- Egy másik feldolgozó lekérdezi a vezénylést.
- A lekért vezénylés egy másik feldolgozóra vagy ugyanarra a feldolgozóra szállhat le.
A folyamat addig ismétlődik, amíg elérhetővé nem válik egy munkaerő, aki képes a vezénylés kezelésére. Ez a stratégia zökkenőmentesen kezeli a gördülő üzembe helyezéseket, ahol a dolgozók fokozatosan frissülnek.
Sikertelen: Akkor használja ezt a stratégiát, ha nem várható, hogy a munkavállaló másik verziója feldolgozza az orchestrációt. A vezénylés sikertelen, és végállapotba lép.
Megjegyzés:
Konfigurálja a hibastratégiát a FailureStrategy verziószámozási beállítások tulajdonságán keresztül, ahogyan az a verziómegfelelő kódmintákban látható.
Orchiestrationok indítása konkrét verziókkal
Alapértelmezés szerint minden új vezénylési példány a konfigurációban megadott defaultVersion aktuális host.json értéket használja. Azonban lehetnek olyan forgatókönyvek, amelyekben orchestration-öket kell létrehoznia egy adott verzióval, amely eltér az aktuális alapértelmezettől.
Mikor érdemes bizonyos verziókat használni?
- Fokozatos migráció: Továbbra is készítsen orchestrációkat egy régebbi verzióval, még akkor is, ha újabb verziót telepítettek.
- Tesztelési forgatókönyvek: Adott verzió viselkedésének tesztelése éles környezetben.
- Visszaállítási helyzetek: Ideiglenesen térjen vissza a korábbi verzió használatára a példányok létrehozásakor.
- Verzióspecifikus munkafolyamatok: A különböző üzleti folyamatok különböző vezénylési verziókat igényelnek.
[Function("HttpStart")]
public static async Task<HttpResponseData> HttpStart(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req,
[DurableClient] DurableTaskClient client,
FunctionContext executionContext)
{
var options = new StartOrchestrationOptions
{
Version = "1.0"
};
string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(
"ProcessOrderOrchestrator", orderId, options);
// ...
}
Az alvezényléseket a vezénylő függvény adott verzióival is elindíthatja:
[Function("MainOrchestrator")]
public static async Task<string> RunMainOrchestrator(
[OrchestrationTrigger] TaskOrchestrationContext context)
{
var subOptions = new SubOrchestratorOptions
{
Version = "1.0"
};
var result = await context.CallSubOrchestratorAsync<string>(
"ProcessPaymentOrchestrator", orderId, subOptions);
// ...
}
Régi kód elérési útjainak eltávolítása
Idővel előfordulhat, hogy el szeretné távolítani az örökölt kódútvonalakat a vezénylő függvényekből a karbantartás egyszerűsítése és a műszaki adósság csökkentése érdekében. ** A meglévő folyamatvezérlési példányok megszakadásának elkerülése érdekében gondosan távolítsa el a kódot.
Ha biztonságos az örökölt kód eltávolítása
- A régi verziót használó összes vezénylési példány befejeződött (sikeres, sikertelen vagy befejeződött).
- A rendszer nem hoz létre új orkestrációs példányokat a régi verzióval.
- Ön figyeléssel vagy lekérdezéssel ellenőrizte, hogy egyetlen példány sem fut a korábbi verzióval.
- A régi verzió utolsó üzembe helyezése óta elegendő idő telt el.
A futó példányok ellenőrzéséhez használja a példánykezelési API-kat az események állapot szerinti lekérdezéséhez, és győződjön meg róla, hogy a régi verzióval már nem folyik egy sem.
A futó példányok ellenőrzéséhez használja a DurableTaskClient-ot, hogy listázza a vezénylési példányokat állapot szerint szűrve, és ellenőrizze, hogy a régi verzió közül egyik sem van már folyamatban.
Figyelmeztetés
A legacy kódútvonalak eltávolítása, miközben a orchestration instanciák még mindig futtatják azokat a verziókat, determinista visszajátszási hibákat okozhat. A kód eltávolítása előtt mindig ellenőrizze, hogy egyetlen példány sem használja-e az örökölt verziót.
Bevált gyakorlatok
Verziókezelés
-
Többrészes verziószámozás használata: Konzisztens verziószámozási séma bevezetése, például
major.minor.patch. - Dokumentumtörési változások: Egyértelműen dokumentálja, hogy milyen módosításokhoz van szükség új verzióra.
- Verzió életciklusának megtervezése: Határozza meg, mikor kell eltávolítani az örökölt kód elérési útjait.
Kódszervezés
- Különálló verziólogika: Használjon elágaztatási vagy különálló metódusokat a különböző verziókhoz.
- A determinizmus megőrzése: Ne módosítsa a meglévő verziólogikát az üzembe helyezés után. Ha a módosításokra feltétlenül szükség van, például a kritikus hibajavítások, győződjön meg arról, hogy determinisztikus viselkedést tartanak fenn, és nem módosítják a műveletek sorrendjét.
- Alaposan tesztelje: Tesztelje az összes verzióutat, különösen az átállások során.
Monitorozás és megfigyelhetőség
- Naplóverzió adatai: A könnyebb hibakeresés érdekében vegye fel a verziót a naplózásba.
- Verzióterjesztés figyelése: Nyomon követheti, hogy mely verziók futnak aktívan.
- Riasztások beállítása: Figyelheti a verzióval kapcsolatos hibákat.
Hibaelhárítás
Gyakori problémák
Probléma: Az 1.0-s verzióval létrehozott vezénylési példányok a 2.0-s verzió telepítése után meghiúsulnak
- Megoldás: Győződjön meg arról, hogy az 1.0-s verzió kódútvonala a vezénylőben pontosan ugyanaz marad. A végrehajtási sorozat bármilyen módosítása megszakíthatja a determinisztikus visszajátszást.
Probléma: A régebbi vezénylőverziókat futtató dolgozók nem futtathatnak új vezényléseket
-
Megoldás: Ez a viselkedés várható. A futtatókörnyezet megakadályozza, hogy az idősebb feldolgozók újabb verziók futtatásával orchestration műveleteket hajtsanak végre. Győződjön meg arról, hogy minden munkavállaló a legújabb verzióra van frissítve, és hogy a
defaultVersionbeállításuk ahost.jsonennek megfelelően van frissítve.
-
Megoldás: Ez a viselkedés várható. A futtatókörnyezet megakadályozza, hogy az idősebb feldolgozók újabb verziók futtatásával orchestration műveleteket hajtsanak végre. Győződjön meg arról, hogy minden munkavállaló a legújabb verzióra van frissítve, és hogy a
Probléma: A verzióinformációk nem érhetők el a vezénylőben (
context.Versionvagycontext.getVersion()null értékű, adefaultVersionbeállítástól függetlenül)- Megoldás: Ellenőrizze az Előfeltételek szakaszt , és győződjön meg arról, hogy a környezet megfelel a vezénylési verziószámozás összes követelményének.
Probléma: Az újabb verzió orchestrációi nagyon lassan haladnak, vagy megakadtak
-
Megoldás: Ennek a problémának különböző kiváltó okai lehetnek:
-
Nem elegendő új feldolgozó: Győződjön meg arról, hogy elegendő, azonos vagy magasabb verziójú
defaultVersionfeldolgozó van üzembe helyezve és aktív. - Vezénylési útválasztási interferencia az idősebb munkavállalóktól: A régi munkavállalók zavarhatják a vezénylési útválasztási mechanizmust, ami megnehezíti az új dolgozók számára a vezénylések felvételét. Ez az interferencia különösen észlelhető bizonyos tárolószolgáltatók (Azure Storage vagy MSSQL) esetén. Az Azure Functions platform általában gondoskodik arról, hogy az üzembe helyezés után a régi munkameneteket rövid időn belül eltávolítják, így a késés általában nem jelentősnek számít. Fontolja meg a Durable Task Scheduler használatát egy továbbfejlesztett útválasztási mechanizmushoz.
-
Nem elegendő új feldolgozó: Győződjön meg arról, hogy elegendő, azonos vagy magasabb verziójú
-
Megoldás: Ennek a problémának különböző kiváltó okai lehetnek:
Hibaelhárítás
Gyakori problémák
Probléma: Az vezénylések elakadtak vagy nem haladnak az új verzió üzembe helyezése után
-
Megoldás: Ellenőrizze, hogy
MatchStrategyésFailureStrategymegfelelően vannak konfigurálva a munkás verziókezelési beállításai között. HaStrictegyezést használ, csak az azonos verziójú munkavállalók dolgozhatják fel ezeket a vezényléseket. Váltson aCurrentOrOlder-re, ha visszafelé kompatibilitásra van szüksége.
-
Megoldás: Ellenőrizze, hogy
Probléma: A vezénylések azonnal meghiúsulnak egy verzióeltérési hibával
-
Megoldás: Ellenőrizze, hogy a
FailureStrategyFail-re van-e állítva. Ha igen, az elérhető feldolgozói verzióval nem egyező vezénylések terminálhiba állapotba kerülnek. Ehelyett használja aReject-t, hogy a folyamatvezérlés az üzenetsorban maradhasson, amíg egy kompatibilis feldolgozó el nem érhető.
-
Megoldás: Ellenőrizze, hogy a
Probléma:
context.Versionvezénylési példányokNone/null/undefinedvisszaadása-
Megoldás: Az alapértelmezett verzió konfigurálása előtt létrehozott vezénylések nem rendelkeznek hozzárendelt verzióval. Győződjön meg arról, hogy az orchestrátor logikája a
nullvagy üres verzióértékeket régi kódútvonalként kezeli.
-
Megoldás: Az alapértelmezett verzió konfigurálása előtt létrehozott vezénylések nem rendelkeznek hozzárendelt verzióval. Győződjön meg arról, hogy az orchestrátor logikája a
Kapcsolódó tartalom
::: zóna-vége