Skip to content

πŸ“¦ Modernize Orleans.Providers.RabbitMQ for Orleans v8+ and RabbitMQ v7 ClientΒ #6

@SilentBlueD666

Description

@SilentBlueD666

πŸ“ Introduction

This issue tracks the work to modernize the Orleans.Providers.RabbitMQ library, bringing it up to date with:

The goal is to make the provider reliable, extensible, and production-ready β€” aligning with Orleans' dependency injection and lifecycle models, improving throughput and resiliency, and embracing modern RabbitMQ features.

Given the age and structure of the current library, we will rebuild the provider from the ground up rather than modify the existing codebase.

πŸ‘‰ Community feedback is welcome and encouraged, if you have ideas, use cases, or suggestions, please share them in this issue!


βœ… Goals / Features for the New Version

⬆️ Upgrade to RabbitMQ.Client v7

  • Adopt new APIs and handle breaking changes
  • Improve connection lifecycle and error handling

🧱 Align with Orleans v8+ Streaming Provider Architecture

  • Rename library to Orleans.Streaming.RabbitMQ
  • Support proper lifecycle management via ILifecycleParticipant<ISiloLifecycle> and/or DI disposal patterns.

🧡 Improve Concurrency & Reliability

  • Ensure thread-safe publishing and consuming

πŸ“ˆ Metrics & Observability

  • Use high-performance structured logging (e.g., Microsoft.Extensions.Logging)
  • Integrate with Orleans telemetry (OpenTelemetry-friendly)
  • Expose key metrics: consumed messages, published messages, etc.

πŸ§ͺ Testing (Unit + Integration)

  • Provide mocked tests for core components
  • Use Docker/Testcontainers for full RabbitMQ integration testing
  • Cover edge cases: message loss, reconnects, pub-sub fanout

↩️ Backpressure & Retry Support

  • Respect Orleans backpressure and flow control expectations
  • Optional Provide configurable retry strategies
  • Optional support for DLQ (dead letter queue) on failure

πŸ“€ Producer Enhancements (optional)

  • Handle publisher confirms
  • Support message properties (headers, content type, etc.)

πŸ”— Explore RabbitMQ Stream Plugin (optional)

  • Support for rewindable streams and high-throughput scenarios
  • Consider using this as an alternative provider (e.g., Orleans.Streaming.RabbitMQ.Streams)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions