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:56000Processing-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
- Erweiterte Konfiguration — Worker-Settings, Overrides und Health Checks
- Authentifizierung — OAuth 2.0 Konfiguration