-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
area-cloud-nativeCloud-Native patterns and integrationsCloud-Native patterns and integrationsarea-integrationExternal system integration (Dapr, etc.)External system integration (Dapr, etc.)area-microservicesMicroservices patterns and infrastructureMicroservices patterns and infrastructurearea-transportMessage transport/broker implementationsMessage transport/broker implementationscomplexity-mediumComplexity: MediumComplexity: MediumenhancementNew feature or requestNew feature or requestnew-packageRequires creating a new NuGet packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featuresPhase 2: Functionality - new featurespriority-mediumPriority: Medium (⭐⭐⭐)Priority: Medium (⭐⭐⭐)transport-daprDapr runtime integrationDapr runtime integration
Milestone
Description
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
IDaprMessagePublisherIDaprMessageSubscriberIDaprServiceInvoker(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
-
Direct broker integration: Implementing each broker directly without Dapr abstraction. This provides more control but requires more code per broker.
-
Custom abstraction layer: Building our own broker abstraction. This is flexible but duplicates what Dapr already provides.
-
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.Daprpackage - 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
- [FEATURE] CloudEvents format support #260 - CloudEvents Format
- [FEATURE] Encina.Pulsar - Apache Pulsar transport #239 - Apache Pulsar Transport
Metadata
Metadata
Assignees
Labels
area-cloud-nativeCloud-Native patterns and integrationsCloud-Native patterns and integrationsarea-integrationExternal system integration (Dapr, etc.)External system integration (Dapr, etc.)area-microservicesMicroservices patterns and infrastructureMicroservices patterns and infrastructurearea-transportMessage transport/broker implementationsMessage transport/broker implementationscomplexity-mediumComplexity: MediumComplexity: MediumenhancementNew feature or requestNew feature or requestnew-packageRequires creating a new NuGet packageRequires creating a new NuGet packagephase-2-functionalityPhase 2: Functionality - new featuresPhase 2: Functionality - new featurespriority-mediumPriority: Medium (⭐⭐⭐)Priority: Medium (⭐⭐⭐)transport-daprDapr runtime integrationDapr runtime integration