Skip to content

ConduitR 1.0.2

Choose a tag to compare

@rezabazargan rezabazargan released this 13 Aug 22:06
· 37 commits to main since this release
c1c4159

✨ Highlights

  • Performance: cached Send/Stream pipelines per (TRequest,TResponse) → avoids reflection and delegate recomposition on the hot path.

  • Publish strategies: choose how notifications run

    • Parallel (default), Sequential, StopOnFirstException.
  • New package — ConduitR.Processing: MediatR-style pre/post processors as pipeline behaviors.

  • New package — ConduitR.Resilience.Polly: retry, per-attempt timeout (pessimistic), and circuit-breaker.

  • Hot-path polish: tighter wrappers (no LINQ, fewer allocations), lean publish path.

  • Docs: added guides for performance, processing, and resilience.

📦 Packages

  • ConduitR 1.0.2
  • ConduitR.Abstractions 1.0.2
  • ConduitR.DependencyInjection 1.0.2
  • ConduitR.AspNetCore 1.0.2
  • ConduitR.Validation.FluentValidation 1.0.2
  • New: ConduitR.Processing 1.0.2
  • New: ConduitR.Resilience.Polly 1.0.2 (depends on Polly 7.x)

🚀 Usage snippets

Publish strategy

using ConduitR.DependencyInjection;

services.AddConduit(cfg =>
{
    cfg.PublishStrategy = PublishStrategy.Sequential; // or StopOnFirstException
    cfg.AddHandlersFromAssemblies(typeof(Program).Assembly);
});

Pre/Post processing

using ConduitR.Processing;

services.AddConduitProcessing(typeof(Program).Assembly);

public sealed class AuditPre : IRequestPreProcessor<CreateOrder>
{
    public Task Process(CreateOrder req, CancellationToken ct) { /* audit */ return Task.CompletedTask; }
}

public sealed class MetricsPost : IRequestPostProcessor<CreateOrder, CreateOrderResult>
{
    public Task Process(CreateOrder req, CreateOrderResult res, CancellationToken ct) { /* metrics */ return Task.CompletedTask; }
}

Resilience (Polly)

using ConduitR.Resilience.Polly;

services.AddConduitResiliencePolly(o =>
{
    o.RetryCount = 3;                    // exponential backoff
    o.Timeout = TimeSpan.FromSeconds(1); // per-attempt timeout (pessimistic)
    o.CircuitBreakerEnabled = true;
    o.CircuitBreakerFailures = 5;
    o.CircuitBreakerDuration = TimeSpan.FromSeconds(30);
});

⚠️ Breaking changes

None. This release is drop-in compatible.

🔧 Upgrade notes

  • Optional: add ConduitR.Processing and/or ConduitR.Resilience.Polly to your app’s DI (see snippets above).
  • CI users: ensure your workflow packs the two new projects (see step 1).

📚 Docs

  • docs/perf-pipeline-cache.md
  • docs/processing.md
  • docs/resilience-polly.md