Ga naar inhoud
getnextpdf.com

Enterprise editie

Output Pipeline — Diepe referentie

NextPDF\Enterprise\OutputPipeline voert veel Pro-pijplijnmanifesten uit als één batch. BatchPipelineOrchestrator verpakt de Pro PipelineExecutor met batch-coördinatie: een bounded-resource-guard op de batchgrootte, een optionele globale batch-time-out, variabele-injectie per manifest en aggregaatboekhouding. Een optionele compliancecontrole aan het einde van de batch hervalideert elke voltooide output via de Enterprise-compliancegateway en faalt closed. Elke run retourneert een BatchPipelineResult met resultaten per manifest, voltooide en mislukte tellingen, timing en het optionele compliancerapport.

Deze mogelijkheid wordt meegeleverd in NextPDF Enterprise (nextpdf/enterprise) en wordt geactiveerd met een licentie-envelop op Enterprise-niveau. Een implementatie zonder dat recht laadt de klassen van de mogelijkheid niet. Vergelijk edities en vraag een licentie aan.

TierOutput-pijplijnoppervlak
CoreGeen output-pijplijnoppervlak.
ProSingle-manifest-pijplijn (capaciteit pro.output.pipeline).
EnterpriseBatch-orchestratie, batchgrootte-grens, batch-time-out, compliance-handoff.

Het Enterprise-batchoppervlak draagt geen afzonderlijke capaciteitscode per functie; de pakketgrens schermt het af. De Pro single-manifest-capaciteit pro.output.pipeline is een voorwaarde, niet de gate. Een Pro-licentie alleen ontgrendelt alleen de onderliggende single-manifest-pijplijn, niet dit batchoppervlak.

Terminal window
composer require nextpdf/enterprise:^3
SymboolParametersStandaardgedragRetourneertGooit of faalt metOpmerkingen
BatchPipelineOrchestrator::__construct()PipelineExecutor $executor, BatchPipelineConfig $config, ?ComplianceGateway $complianceGateway, ComplianceProfile $complianceProfileStandaardconfiguratie; geen gateway; profiel ComplianceProfile::PdfA4NietsInjecteer een gateway wanneer de compliancecontrole is ingeschakeld; zonder gateway wordt elk gecontroleerd manifest als mislukt gerapporteerd.
BatchPipelineOrchestrator::executeBatch()list<PipelineManifest> $manifests, array<string, array<string, mixed>> $variablesMap = []Voert manifesten uit in indieningsvolgorde; variabelen worden opgelost op manifest-IDBatchPipelineResultOverflowException wanneer de batch 10.000 manifesten overschrijdt; gateway-uitzonderingen wanneer de compliancecontrole is ingeschakeld (zie Randgevallen)Resolver-Throwables ontsnappen nooit; de Pro-executor degradeert ze tot mislukte stapresultaten.
BatchPipelineConfig::__construct()int $maxConcurrency = 4, int $timeoutMs = 0, bool $complianceCheckOnComplete = falseConcurrency 4; geen time-out; geen compliancecontroleNietsReadonly value object. timeoutMs = 0 schakelt de batch-time-out uit.
BatchPipelineResult::__construct()list<PipelineResult> $results, int $totalManifests, int $completedCount, int $failedCount, float $durationMs, ?array $complianceReport = nullAggregaat over de PipelineResult-waarden per manifestNietsReadonly. complianceReport blijft null tenzij de controle is uitgevoerd.
BatchPipelineResult::allSucceeded()Test failedCount === 0boolNietsRetourneert true bij een door time-out afgekapte batch zonder mislukkingen; zie Randgevallen.
BatchPipelineResult::successRate()completedCount / totalManifestsfloatNietsRetourneert 1.0 voor een lege batch.
BatchPipelineResult::hasComplianceReport()Test complianceReport !== nullboolNiets
public function __construct(
private readonly PipelineExecutor $executor,
private readonly BatchPipelineConfig $config = new BatchPipelineConfig(),
private readonly ?ComplianceGateway $complianceGateway = null,
private readonly ComplianceProfile $complianceProfile = ComplianceProfile::PdfA4,
) {}
public function executeBatch(
array $manifests,
array $variablesMap = [],
): BatchPipelineResult
public function __construct(
public int $maxConcurrency = 4,
public int $timeoutMs = 0,
public bool $complianceCheckOnComplete = false,
) {}

executeBatch() toetst eerst de batchgrootte aan een grens van 10.000 manifesten. Een batch boven de grens gooit OverflowException voordat er ook maar één manifest wordt uitgevoerd; er degradeert niets stilzwijgend.

Manifesten worden vervolgens in indieningsvolgorde uitgevoerd via de Pro PipelineExecutor. Elk manifest ontvangt de variabelen-entry die op zijn ID is gekeyed in $variablesMap; een manifest zonder entry ontvangt een lege variabelenmap. Een manifest telt als voltooid wanneer zijn PipelineResult-status Completed is; elke andere terminale status telt als mislukt. Resolver-uitzonderingen ontsnappen niet: de Pro-executor zet elke resolver-Throwable om in een mislukt stapresultaat, dus executeBatch() aggregeert altijd resultaten in plaats van halverwege de batch af te breken bij een stapfout.

Wanneer timeoutMs groter is dan nul, wordt de verstreken tijd gecontroleerd voordat elk manifest start. Zodra het budget is uitgeput, worden de resterende manifesten overgeslagen: ze produceren geen PipelineResult en tellen als voltooid noch mislukt. totalManifests rapporteert altijd het ingediende aantal.

Wanneer complianceCheckOnComplete is ingeschakeld, valideert de orchestrator de uiteindelijke PDF van elk voltooid manifest tegen het geconfigureerde ComplianceProfile via de geïnjecteerde ComplianceGateway. De controle faalt closed:

  • Geen gateway geïnjecteerd: elk gecontroleerd manifest wordt als mislukt gerapporteerd, aangezien compliance nooit is gevalideerd.
  • Geen PDF-output afleidbaar uit de stapoutputs van het manifest: mislukt.
  • Gateway retourneert geen resultaat (onbeschikbaarheid van de sidecar in optionele modus): mislukt. Het ontbreken van een positief resultaat is geen pass.
  • Gateway rapporteert enige non-conformiteit: mislukt.

De uiteindelijke PDF wordt afgeleid door de stapoutputs van een voltooid manifest te doorzoeken, laatste stap eerst, op een directe string-waarde die begint met de %PDF-header. Stapoutputs nesten nooit PDF-bytestrings in subarrays; alleen directe outputwaarden worden geïnspecteerd. Manifesten die niet zijn voltooid, worden overgeslagen en niet gecontroleerd.

Het compliancerapport is een array met de sleutels profile, checked, passed, failed en failures; elke failure-entry draagt manifestId en reason. Het rapport wordt aan BatchPipelineResult::$complianceReport gekoppeld en is bereikbaar via hasComplianceReport().

De compliance-handoff is een hervalidatie-hulpmiddel, geen autorisatiecontrole. Het rapporteert alleen bevindingen.

  • Meer dan 10.000 manifesten: OverflowException voordat er enige uitvoering start.
  • timeoutMs = 0 betekent geen batch-time-out. Stel in productie een eindige waarde in.
  • Time-outafkapping: overgeslagen manifesten verschijnen in geen enkele telling, dus completedCount + failedCount kan kleiner zijn dan totalManifests. allSucceeded() test alleen failedCount === 0 en kan true retourneren voor een afgekapte batch. Vergelijk count($result->results) met totalManifests om afkapping te detecteren.
  • successRate() retourneert 1.0 voor een lege batch (nul ingediende manifesten).
  • Manifest-ID’s worden op batchniveau niet gededupliceerd. Twee manifesten die een ID delen, worden beide uitgevoerd en lossen dezelfde variabelen-entry op.
  • Structurele manifestfouten (lege staplijst, dubbele stap-ID’s, onbekende afhankelijkheid, afhankelijkheidscyclus, mismatch in outputtype, ontbrekende resume-stap) gooien InvalidArgumentException bij de constructie van het manifest, voordat executeBatch() ooit wordt aangeroepen.
  • Met de compliancecontrole ingeschakeld kan ComplianceGateway::validate() een ComplianceSidecarUnavailableException gooien (sidecar niet beschikbaar in vereiste modus) of een InvalidArgumentException (geen validator geregistreerd voor de tool van het profiel). Beide uitzonderingen ontsnappen aan executeBatch() na uitvoering maar voordat het resultaat wordt opgebouwd, dus de resultaten per manifest gaan voor de aanroeper verloren. In optionele modus retourneert de gateway in plaats daarvan null en wordt het manifest als een compliancefout geregistreerd.
  • Een in-pijplijn compliance-handoff-stap faalt wanneer geen enkele upstream-stapoutput herkenbare PDF-bytes bevat; hij slaagt nooit stilzwijgend.
  • Deze module voert geen cryptografische bewerkingen uit; de FIPS-modus is niet van toepassing.

Voor deze module wordt geen standaardconformiteit geclaimd; het is een orchestratielaag. De optionele compliancecontrole schuift door naar de Enterprise-compliancegateway en zijn externe validators, die hun eigen referenties dragen. Het standaardprofiel is ComplianceProfile::PdfA4; andere gateway-profielen dekken verdere PDF/A-, PDF/UA- en PAdES-doelen.

Een compliancerapport vermeldt validatorbevindingen tegen het geselecteerde profiel. Het certificeert geen document, garandeert geen regelgevende toereikendheid en vormt geen juridisch advies. Beoordelen of een output aan je verplichtingen voldoet, is jouw verantwoordelijkheid.

  • In productie-implementaties worden parallelle worker-dispatch en backpressure afgehandeld door een afzonderlijke execution-sidecar. De PHP-orchestrator levert de batch-coördinatie en de compliance-handoff-logica en wordt aangeroepen door de job-worker, niet rechtstreeks door request-handlers.
  • Het PHP-fallbackpad voert manifesten sequentieel uit. maxConcurrency begrenst de gelijktijdige worker-callbacks in de sidecar-gestuurde implementatie; de omvang ervan ten opzichte van de PHP-worker-pool is de verantwoordelijkheid van de operator.
  • De resolver van de in-pijplijn compliance-handoff-stap is een intern type dat is geregistreerd voor inspect-type-stappen. Schakel validatie aan het einde van de batch in via BatchPipelineConfig in plaats van daarvoor rechtstreeks pijplijnstappen te construeren.
  • Construeer PipelineManifest-instanties vroeg. Hun structurele validatie draait in de constructor, dus ongeldige grafen falen fast en verbruiken nooit batchbudget.

Deze pagina documenteert alleen extern waarneembaar gedrag en het ondersteunde publieke API-oppervlak. Interne namespace-paden, helperklassen, mechanismetabellen, runbook-bestandsnamen en ticketprefixen vallen buiten de scope.