Skip to content

[FEATURE] Encina.Dapr - Dapr PubSub integration #242

@dlrivada

Description

@dlrivada

Summary

Add Dapr (Distributed Application Runtime) PubSub as a transport abstraction layer.

Motivation

  • Dapr abstracts multiple message brokers behind a single API
  • Deep integration with .NET Aspire (March 2025)
  • Broker-agnostic: switch between Redis, RabbitMQ, Kafka, Azure Service Bus without code changes
  • Built-in features: retries, dead-letter, CloudEvents format
  • Service invocation for request/reply patterns
  • Sidecar architecture simplifies local development

Proposed Solution

New Package

  • Encina.Dapr

Interfaces

  • IDaprMessagePublisher
  • IDaprMessageSubscriber
  • IDaprServiceInvoker (for request/reply)

Features

  • Pub/Sub messaging via Dapr sidecar
  • CloudEvents format (native to Dapr)
  • Service invocation for synchronous calls
  • Bulk publish support
  • Topic subscriptions with routing
  • Dead-letter topic handling
  • Integration with Dapr Workflows

Configuration

services.AddEncinaDapr(options =>
{
    options.PubSubName = "pubsub";
    options.AppId = "my-app";
    options.DaprHttpPort = 3500;
    options.DaprGrpcPort = 50001;
});

Alternatives Considered

  1. Direct broker integration: Implementing each broker directly without Dapr abstraction. This provides more control but requires more code per broker.

  2. Custom abstraction layer: Building our own broker abstraction. This is flexible but duplicates what Dapr already provides.

  3. Dapr-only architecture: Using Dapr for everything instead of native integrations. This simplifies but may not optimize for specific broker features.

Affected Packages

  • Encina (core)
  • Encina.AspNetCore
  • Encina.EntityFrameworkCore
  • Encina.Dapper.*
  • Encina.ADO.*
  • Encina.MongoDB
  • Encina.Messaging
  • Encina.Caching.*
  • Other: Encina.Dapr

Additional Context

Implementation Tasks

  • Create Encina.Dapr package
  • Implement publisher via Dapr SDK
  • Implement subscriber with topic routing
  • Implement service invocation support
  • CloudEvents format handling
  • Health check integration
  • OpenTelemetry traces/metrics (via Dapr built-in)
  • Unit tests
  • Integration tests with Dapr sidecar

References

Acceptance Criteria

  • Publisher implementation via Dapr SDK
  • Subscriber implementation with topic routing
  • Service invocation support
  • CloudEvents format handling
  • Health check integration
  • OpenTelemetry traces/metrics (via Dapr built-in)
  • Unit tests
  • Integration tests with Dapr sidecar

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-cloud-nativeCloud-Native patterns and integrationsarea-integrationExternal system integration (Dapr, etc.)area-microservicesMicroservices patterns and infrastructurearea-transportMessage transport/broker implementationscomplexity-mediumComplexity: MediumenhancementNew feature or requestnew-packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featurespriority-mediumPriority: Medium (⭐⭐⭐)transport-daprDapr runtime integration

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions