Stratara.Resilience
3.1.7
dotnet add package Stratara.Resilience --version 3.1.7
NuGet\Install-Package Stratara.Resilience -Version 3.1.7
<PackageReference Include="Stratara.Resilience" Version="3.1.7" />
<PackageVersion Include="Stratara.Resilience" Version="3.1.7" />
<PackageReference Include="Stratara.Resilience" />
paket add Stratara.Resilience --version 3.1.7
#r "nuget: Stratara.Resilience, 3.1.7"
#:package Stratara.Resilience@3.1.7
#addin nuget:?package=Stratara.Resilience&version=3.1.7
#tool nuget:?package=Stratara.Resilience&version=3.1.7
Stratara.Resilience
License: MIT.
Polly-based named resilience pipelines pre-wired for Stratara's messaging + outbox dispatch paths.
Quick start
services.AddResiliencePipelines();
// Resolve a specific named pipeline at the call site:
var pipeline = sp.GetRequiredService<ResiliencePipelineProvider<string>>()
.GetPipeline(ResilienceNames.CommandDispatcher);
await pipeline.ExecuteAsync(async ct => {
await DoFlakyWorkAsync(ct);
}, cancellationToken);
Named pipelines
| Name | Constant | Strategy |
|---|---|---|
| Message bus | ResilienceNames.MessageBus |
Exponential retry up to int.MaxValue, 10s → 60s, jitter |
| Command dispatcher | ResilienceNames.CommandDispatcher |
3 retries, exponential, 200ms, jitter |
| Event bundle dispatcher | ResilienceNames.EventBundleDispatcher |
3 retries, exponential, 200ms, jitter |
| Concurrency conflict | ResilienceNames.ConcurrencyConflict |
Retry only on ConcurrencyConflictException, 5 attempts, short exponential, jitter |
The ResilienceFactory that builds these is internal — interact via DI and ResilienceNames only.
Mediator resilience behavior
Hook a named pipeline into the in-process mediator pipeline per request — no manual ExecuteAsync plumbing:
services.AddResiliencePipelines();
services.AddStrataraResilienceBehavior(); // after AddStrataraValidation() / AddStrataraTenantIsolation()
public sealed record ReserveStock(Guid Id, int Qty) : ICommand<bool>, IResilientRequest
{
public string ResiliencePipelineName => ResilienceNames.ConcurrencyConflict;
}
Any request implementing Stratara.Abstractions.Resilience.IResilientRequest is dispatched inside the
named pipeline it selects; unmarked requests pass straight through. Only mark handlers that are safe
to re-run — naturally idempotent work, or operations guarded by optimistic concurrency (point at the
ConcurrencyConflict pipeline). Register the behavior after the validation / tenant-isolation
behaviors so a retry re-runs the handler, not the guards.
Dependencies
Stratara.Abstractions— forIPipelineBehavior,IResilientRequest, andConcurrencyConflictException.Microsoft.Extensions.DependencyInjection.AbstractionsMicrosoft.Extensions.Resilience(Polly).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.8)
- Microsoft.Extensions.Resilience (>= 10.6.0)
- Stratara.Abstractions (>= 3.1.7)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Stratara.Resilience:
| Package | Downloads |
|---|---|
|
Stratara.Shared
Umbrella package for the Stratara framework — source-generated logger extensions for outbox / saga / projection / messaging, domain-event helpers, merge primitives, and the Tier-A/B abstractions surface re-exported as one transitive bundle. |
GitHub repositories
This package is not used by any popular GitHub repositories.
### Added
- **Event upcasting (`IEventUpcaster`).** Persisted events can now be transformed from an older
on-disk schema into the shape the current event record expects, applied on read before the payload
is deserialized. Register upcasters with `AddEventUpcaster<TUpcaster>()`; each implements
`IEventUpcaster` (`SourceEventTypeName` / `TargetEventTypeName` plus `JsonNode Upcast(JsonNode)`) and
they chain across successive schema versions (v1→v2→v3), including event-type renames — the source
type no longer needs to exist in the assembly. Matching ignores the assembly `Version` segment, and
a cyclic or duplicate-source chain is rejected. Hosts that register no upcasters are unaffected
(transparent pass-through). Snapshots are not upcasted — change an aggregate's shape and rebuild its
snapshots.
### Changed
- **Copyright holder corrected to the full legal name "Norbert Heinz Rosenwinkel"** in the `LICENSE`
file and in the `Authors` / `Copyright` package metadata. No code or licensing-terms change — the
license remains MIT.