Skip to Content

Hosting Integration

Die Hosting-Extension bietet automatische Handler-Erkennung über Attribute und Dependency Injection.

Handler definieren

[ExternalTaskHandler("BestellungVerarbeiten")] public class BestellungHandler : IExternalTaskHandler<BestellungInput, BestellungOutput> { private readonly IBestellService _bestellService; public BestellungHandler(IBestellService bestellService) { _bestellService = bestellService; } public async Task<BestellungOutput> HandleAsync( BestellungInput input, ExternalTask task, CancellationToken cancellationToken) { Bestellung bestellung = await _bestellService.VerarbeiteAsync(input.BestellNr, cancellationToken); return new BestellungOutput { Status = bestellung.Status, LieferDatum = bestellung.GeschaetztesLieferDatum }; } }

Handler registrieren

IHostBuilder hostBuilder = Host.CreateDefaultBuilder(args); // Services registrieren hostBuilder.ConfigureServices(services => { services.AddScoped<IBestellService, BestellService>(); services.AddScoped<BestellungHandler>(); // Scoped = neuer Scope pro Task }); // External Task Worker aktivieren hostBuilder.UseExternalTaskWorkers((context, options) => { options.ConfigureWorkers(context.Configuration.GetSection("ProcessCubeEngine")); options.AuthenticateUsingOAuth20ClientCredentials(); });

Die ServiceBasedHandlerCatalog findet automatisch alle Klassen mit [ExternalTaskHandler]-Attribut im DI-Container. Bei Scoped-Registrierung wird für jeden Task ein eigener DI-Scope erstellt und nach Abschluss disposed.

Handler-Erkennung

Worker-Lebenszyklus

Schnellkonfiguration für lokale Entwicklung

options.ConfigureForStudio(); // Konfiguriert für localhost:56000

Processing-Controller (Pause/Resume)

Die Hosting-Extension stellt einen IExternalTaskProcessingController bereit:

public class MeineKlasse { private readonly IExternalTaskProcessingController _controller; public async Task PauseVerarbeitung() { await _controller.StopExternalTaskProcessingAsync(CancellationToken.None); // Status: ExternalTaskProcessingStatus.Stopped } public async Task FortsetzungVerarbeitung() { await _controller.StartExternalTaskProcessingAsync(CancellationToken.None); // Status: ExternalTaskProcessingStatus.Processing } }

Health Checks

Workers werden automatisch als ASP.NET Health Check registriert:

  • Healthy: Alle registrierten Worker laufen und der letzte Fetch liegt innerhalb von MaxExpectedFetchCycleDuration
  • Unhealthy: Ein Worker hat länger als erwartet keinen Fetch durchgeführt

Correlation-ID-Propagierung

Bei Nutzung der Hosting-Extension wird die CorrelationId des aktuellen External Tasks automatisch als HTTP-Header (X-Correlation-ID) an alle ausgehenden HTTP-Requests des Handlers angehängt. Dies ermöglicht durchgängiges Request-Tracing über Microservice-Grenzen hinweg.

Nächste Schritte