Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Met de exportfunctie voor indelingsgeschiedenis kunt u uitvoeringsgeschiedenissen voor terminalindelingsexemplaren (voltooide, mislukte of beëindigde status) extraheren uit Durable Task Scheduler en deze naar Azure Blob Storage schrijven. Gebruik deze functie voor controle, naleving, analyse en langetermijnarchivering van indelingsgegevens buiten de planner.
Opmerking
De exportfunctie voor orkestratiegeschiedenis is momenteel in preview en beschikbaar voor de Durable Task .NET SDK. Hiervoor is het Microsoft.DurableTask.ExportHistory-pakket vereist.
Aanbeveling
Er is een volledig, uitvoerbaar referentievoorbeeld beschikbaar op ExportHistoryWebApp. We raden u aan deze handleiding te gebruiken als referentie.
Hoe de orkestratiegeschiedenis wordt geëxporteerd
Exportgeschiedenis maakt intern gebruik van duurzame entiteiten en coördinaties om exporttaken betrouwbaar te beheren volgens het volgende proces.
- U maakt een exporttaak via de
ExportHistoryClient, waarbij u een tijdvenster en exportmodus opgeeft. - De SDK maakt een duurzame entiteit (
ExportJob) die de status en voortgang van de taak bijhoudt. - Een interne indeling bevat terminalindelingsexemplaren die overeenkomen met het opgegeven tijdvenster en statusfilters.
- Voor elk overeenkomend exemplaar haalt een activiteit de volledige uitvoeringsgeschiedenis van Durable Task Scheduler op.
- De geschiedenis wordt standaard geserialiseerd (JSONL met gzip-compressie) en naar Azure Blob Storage geschreven.
- De voortgang van de taak wordt gecontroleerd, zodat deze kan worden hervat als deze wordt onderbroken.
Modi voor export voor batch- en doorlopende taken
Exportgeschiedenis ondersteunt twee modi:
| Mode | Gedrag |
|---|---|
| Batch | Exporteert exemplaren die binnen een vast tijdvenster (completedTimeFrom naar completedTimeTo) een terminalstatus hebben bereikt en markeert vervolgens de taak als voltooid. |
| Continue | Volgt terminalinstanties continu vanaf completedTimeFrom, zonder eindtijd. De taak blijft actief totdat u deze verwijdert. |
Vereiste voorwaarden
- .NET 8 SDK of hoger
- Een Durable Task Scheduler-taakhub (of de lokale emulator)
- Een Azure Storage-account (of Azurite voor lokale ontwikkeling)
- De volgende NuGet-pakketten:
Microsoft.DurableTask.ExportHistoryMicrosoft.DurableTask.Client.AzureManagedMicrosoft.DurableTask.Worker.AzureManaged
Orchestration history export inschakelen
Installeer het exportgeschiedenispakket.
dotnet add package Microsoft.DurableTask.ExportHistoryInstalleer de Azure beheerde client- en werkpakketten voor Durable Task Scheduler.
dotnet add package Microsoft.DurableTask.Client.AzureManaged dotnet add package Microsoft.DurableTask.Worker.AzureManagedRegistreer de exportgeschiedenis op zowel de werker als de client.
using Microsoft.DurableTask.Client; using Microsoft.DurableTask.Client.AzureManaged; using Microsoft.DurableTask.ExportHistory; using Microsoft.DurableTask.Worker; using Microsoft.DurableTask.Worker.AzureManaged; string connectionString = builder.Configuration.GetValue<string>("DURABLE_TASK_CONNECTION_STRING") ?? throw new InvalidOperationException("Missing DURABLE_TASK_CONNECTION_STRING"); string storageConnectionString = builder.Configuration.GetValue<string>("EXPORT_HISTORY_STORAGE_CONNECTION_STRING") ?? throw new InvalidOperationException("Missing EXPORT_HISTORY_STORAGE_CONNECTION_STRING"); string containerName = builder.Configuration.GetValue<string>("EXPORT_HISTORY_CONTAINER_NAME") ?? throw new InvalidOperationException("Missing EXPORT_HISTORY_CONTAINER_NAME"); // Register the worker with export history support. // This registers internal entities, orchestrations, and activities that manage export jobs. builder.Services.AddDurableTaskWorker(worker => { worker.UseDurableTaskScheduler(connectionString); worker.UseExportHistory(); }); // Register the client with export history support. // This configures the Azure Blob Storage destination and registers the ExportHistoryClient. builder.Services.AddDurableTaskClient(client => { client.UseDurableTaskScheduler(connectionString); client.UseExportHistory(options => { options.ConnectionString = storageConnectionString; options.ContainerName = containerName; // Optional: set a virtual folder path prefix for blob names (for example, "exports/daily"). // When set, blobs are written to "{prefix}/{hash}.{ext}" instead of "{hash}.{ext}". options.Prefix = builder.Configuration.GetValue<string>("EXPORT_HISTORY_PREFIX"); }); });
Exporttaken maken en beheren
Nadat u de exportgeschiedenis hebt ingeschakeld, gebruikt u ExportHistoryClient om taken te maken en beheren.
Een batchexporttaak maken
In het volgende voorbeeld exporteert een batch-exporttaak alle orkestratie-exemplaren die een terminale status binnen een vast tijdvenster hebben bereikt.
ExportHistoryClient exportClient = app.Services.GetRequiredService<ExportHistoryClient>();
ExportJobCreationOptions options = new(
mode: ExportMode.Batch,
completedTimeFrom: DateTimeOffset.UtcNow.AddHours(-24),
completedTimeTo: DateTimeOffset.UtcNow,
destination: new ExportDestination("my-export-container")
{
// Virtual folder path prefix applied to all blob names for this job
Prefix = "exports/daily",
});
ExportHistoryJobClient jobClient = await exportClient.CreateJobAsync(options);
ExportJobDescription description = await jobClient.DescribeAsync();
Een doorlopende exporttaak maken
In het volgende voorbeeld volgt een continue exporttaak terminalexemplaren onbepaalde tijd vanaf een begintijd.
ExportJobCreationOptions options = new(
mode: ExportMode.Continuous,
completedTimeFrom: DateTimeOffset.UtcNow,
completedTimeTo: null,
destination: null);
ExportHistoryJobClient jobClient = await exportClient.CreateJobAsync(options);
Wanneer destination is null, gebruikt de taak de standaardcontainer en het voorvoegsel dat is geconfigureerd in ExportHistoryStorageOptions.
Details van de exportopdracht ophalen
Gebruik de volgende code om de volledige beschrijving van een taak op te halen, inclusief de status, voortgangstellers en eventuele fouten.
ExportJobDescription? job = await exportClient.GetJobAsync("my-job-id");
Opmerking
GetJobAsync
ExportJobNotFoundException genereert als de opgegeven taak-id niet bestaat. Verwerk deze uitzondering bij het opvragen van banen die mogelijk zijn verwijderd.
De ExportJobDescription volgende omvat:
| Vastgoed | Beschrijving |
|---|---|
JobId |
De unieke taak-id. |
Status |
Huidige status: Pending, Active, Failed, of Completed. |
CreatedAt |
Toen de taak werd gemaakt. |
LastModifiedAt |
Wanneer de taak voor het laatst is bijgewerkt. |
ScannedInstances |
Het totale aantal exemplaren dat tot nu toe is gescand. |
ExportedInstances |
Totaal aantal exemplaren dat tot nu toe is geëxporteerd. |
LastError |
Laatste foutbericht, indien van toepassing. |
Opdrachten weergeven
Exporteer een lijst met actieve taken met behulp van code die vergelijkbaar is met het volgende voorbeeld.
ExportJobQuery query = new()
{
Status = ExportJobStatus.Active,
CreatedFrom = DateTimeOffset.UtcNow.AddDays(-7),
PageSize = 50,
};
AsyncPageable<ExportJobDescription> jobs = exportClient.ListJobsAsync(query);
await foreach (ExportJobDescription job in jobs)
{
Console.WriteLine($"{job.JobId}: {job.Status} ({job.ExportedInstances} exported)");
}
De ExportJobQuery volgende filtereigenschappen worden ondersteund:
| Vastgoed | Beschrijving |
|---|---|
Status |
Filteren op taakstatus: Pending, Active, Failedof Completed. |
JobIdPrefix |
Filter taken waarvan de id begint met dit voorvoegsel. |
CreatedFrom |
Alleen taken weergeven die op deze tijd of daarna zijn gemaakt. |
CreatedTo |
Alleen taken teruggeven die op of vóór deze tijd zijn aangemaakt. |
PageSize |
Maximum aantal resultaten per pagina. |
ContinuationToken |
Token voor het ophalen van de volgende pagina met resultaten. |
Een taak verwijderen
Gebruik de volgende code om een taak te verwijderen.
ExportHistoryJobClient jobClient = exportClient.GetJobClient("my-job-id");
await jobClient.DeleteAsync();
Opmerking
DeleteAsync gooit ExportJobNotFoundException als de taak niet bestaat. Als u een taak verwijdert, worden al geëxporteerde blobs niet uit Azure Blob Storage verwijderd.
Opties voor het maken van een taak exporteren
De ExportJobCreationOptions klasse bepaalt het gedrag van de exporttaak en bevat de volgende parameters.
| Kenmerk | Verplicht | Beschrijving | Verstek |
|---|---|---|---|
mode |
Ja |
Batch voor een vast venster of Continuous voor lopende export. |
— |
completedTimeFrom |
Ja (Batch) | Begin van het tijdvenster (inclusief), gebaseerd op wanneer instanties een eindtoestand hebben bereikt. Voor de continu-modus wordt standaard UtcNow ingesteld indien niet opgegeven. |
— |
completedTimeTo |
Ja (Batch) | Einde van het tijdvenster (inclusief). Moet worden weggelaten voor continue modus. Kan niet in de toekomst zijn. | — |
destination |
No | Overschrijf de standaard blobcontainer en het voorvoegsel voor deze taak. | Maakt gebruik van de standaardinstelling van ExportHistoryStorageOptions |
jobId |
No | Aangepaste taak-id. | Automatisch gegenereerde GUID |
format |
No | Exportindeling: JSONL (gzip gecomprimeerd) of JSON (niet gecomprimeerd). | JSONL met gzip |
runtimeStatus |
No | Filteren op terminalstatussen: Completed, , FailedTerminated. |
Alle terminalstatus |
maxInstancesPerBatch |
No | Aantal exemplaren dat per batch moet worden verwerkt (1-1000). | 100 |
Waar geëxporteerde gegevens worden opgeslagen in Azure Blob Storage
Geëxporteerde geschiedenis wordt naar Azure Blob Storage geschreven met de volgende parameters.
-
Container: standaard van
EXPORT_HISTORY_CONTAINER_NAMEof de onderdrukking per taakdestination. -
Blobnaam: afgeleid van een SHA-256-hash van
(completedTimestamp, instanceId). -
Bestandsindeling:
- Standaard:
.jsonl.gz(JSON Lines, gzip-gecomprimeerd, één geschiedenisgebeurtenis per regel) - Optioneel:
.json(niet-gecomprimeerde JSON-matrix met geschiedenisgebeurtenissen)
- Standaard:
-
Blobpad met voorvoegsel: wanneer een voorvoegsel is geconfigureerd (bijvoorbeeld
exports/daily), wordt het blobpad .exports/daily/{hash}.{ext}Zonder voorvoegsel wordt de blob rechtstreeks naar de root van de container geschreven als{hash}.{ext}.
Elke blob bevat een instanceId metagegevenstag voor traceerbaarheid.
Omgevingsvariabelen voor configuratie van exportgeschiedenis
Gebruik deze omgevingsvariabelen met het voorbeeld van de durable task .NET SDK-exportgeschiedenis.
| Variable | Beschrijving | Standaardvoorbeeld |
|---|---|---|
DURABLE_TASK_CONNECTION_STRING |
Durable Task Scheduler connectionstring | Endpoint=http://localhost:8080;TaskHub=default;Authentication=None |
EXPORT_HISTORY_STORAGE_CONNECTION_STRING |
Azure Storage-verbindingstekenreeks voor geëxporteerde geschiedenisblobs | UseDevelopmentStorage=true |
EXPORT_HISTORY_CONTAINER_NAME |
Blob-container voor geëxporteerde historie | export-history |
EXPORT_HISTORY_PREFIX |
Optioneel padvoorvoegsel voor virtuele mappen voor blobnamen | ongedaan maken |
ASPNETCORE_URLS |
Luister-URL's voor de HTTP-host van het voorbeeld | Standaardinstelling van het framework |
Azure machtigingen voor exportgeschiedenis
Wanneer u Azure resources gebruikt in plaats van lokale emulators, heeft de app-identiteit toegang nodig tot Durable Task Scheduler en Blob Storage:
- Machtiging
Durable Task Data Contributoraan de taakhub van de app verlenen. - Verleen
Storage Blob Data Contributortoestemming voor het opslagaccount dat geëxporteerde geschiedenis-blobs opslaat.
Belangrijke overwegingen voor exporttaken
Gelijktijdige opschoningsbewerkingen:
Als u orkestratie-exemplaren opschoont terwijl een export wordt uitgevoerd, kan dit de export beïnvloeden. Exemplaren die worden opgeschoond voordat de export leest, ontbreken in de geëxporteerde gegevens. Vermijd het uitvoeren van opschoningsbewerkingen gelijktijdig met actieve exporttaken die hetzelfde tijdvenster behandelen.Blob-opschoning:
Als u een exporttaak verwijdert, worden de geëxporteerde blobs niet uit Azure Blob Storage verwijderd. Als u geëxporteerde gegevens wilt verwijderen, verwijdert u de blobs afzonderlijk uit het opslagaccount.
Controleren of de export werkt
Nadat u een exporttaak hebt gemaakt, controleert u of deze werkt door te controleren op beide signalen:
- De taakstatus gaat over van
PendingenActivenaarCompleted(voor batchmodus). - Blob-vermeldingen worden weergegeven in de geconfigureerde exportcontainer.
U kunt de taakstatus programmatisch peilen:
ExportJobDescription? job;
do
{
await Task.Delay(TimeSpan.FromSeconds(5));
job = await exportClient.GetJobAsync(jobId);
Console.WriteLine($"Status: {job?.Status}, Exported: {job?.ExportedInstances}");
}
while (job?.Status is ExportJobStatus.Pending or ExportJobStatus.Active);
Voer voor lokale ontwikkeling deze Azure CLI opdracht uit om de container te controleren:
az storage blob list \
--connection-string "UseDevelopmentStorage=true" \
--container-name export-history \
--output table
Aanbeveling
Het voorbeeld ExportHistoryWebApp bevat een ExportHistoryWebApp.http-bestand met kant-en-klare REST-clientaanvragen voor VS Code. Open deze en klik op Aanvraag verzenden om snel bewerkingen voor maken, ophalen, weergeven en verwijderen te testen.