User Story
As a developer using RabbitMQ as a message broker, I want a native RabbitMQ transport for the outbox processor, so that I can deliver outbox messages to RabbitMQ exchanges without routing them through Dapr.
Background
RabbitMQ is a widely adopted on-premise and cloud-agnostic message broker. Teams using RabbitMQ directly (without Dapr) need a first-class transport integration that uses the official .NET client.
Requirements
- Provide a new NuGet package
NetEvolve.Pulse.RabbitMQ targeting net8.0, net9.0, net10.0.
- Implement
RabbitMqMessageTransport : IMessageTransport using RabbitMQ.Client (v7+, async API).
- Support the following capabilities:
SendAsync — publishes a single message to a preconfigured exchange with a routing key.
SendBatchAsync — publishes multiple messages in a single channel write.
IsHealthyAsync — verifies the connection/channel is open and the broker is reachable.
- Configurable via
RabbitMqTransportOptions:
HostName, Port, VirtualHost, UserName, Password.
ExchangeName — target exchange.
RoutingKey — default routing key (can be overridden per event type via a resolver delegate).
- Expose registration via
IMediatorConfigurator:
services.AddPulse(c => c.UseRabbitMqTransport(options => { ... }));
- The package must reference
RabbitMQ.Client and NetEvolve.Pulse.Extensibility.
Acceptance Criteria
Out of Scope
- Message consumption/subscription.
- Exchange or queue auto-declaration.
- Connection pooling or reconnection policies (recommended to combine with Polly).
- AMQP 1.0 support.
User Story
As a developer using RabbitMQ as a message broker, I want a native RabbitMQ transport for the outbox processor, so that I can deliver outbox messages to RabbitMQ exchanges without routing them through Dapr.
Background
RabbitMQ is a widely adopted on-premise and cloud-agnostic message broker. Teams using RabbitMQ directly (without Dapr) need a first-class transport integration that uses the official .NET client.
Requirements
NetEvolve.Pulse.RabbitMQtargetingnet8.0,net9.0,net10.0.RabbitMqMessageTransport : IMessageTransportusingRabbitMQ.Client(v7+, async API).SendAsync— publishes a single message to a preconfigured exchange with a routing key.SendBatchAsync— publishes multiple messages in a single channel write.IsHealthyAsync— verifies the connection/channel is open and the broker is reachable.RabbitMqTransportOptions:HostName,Port,VirtualHost,UserName,Password.ExchangeName— target exchange.RoutingKey— default routing key (can be overridden per event type via a resolver delegate).IMediatorConfigurator:RabbitMQ.ClientandNetEvolve.Pulse.Extensibility.Acceptance Criteria
NetEvolve.Pulse.RabbitMQpackage builds on all three target frameworks.SendAsyncpublishes a correctly serialized message to the configured exchange.SendBatchAsyncpublishes all messages without opening multiple connections.IsHealthyAsyncreturnsfalsewithout throwing when the broker is unreachable.SendAsync,SendBatchAsync, andIsHealthyAsync(healthy and unhealthy states).Testcontainers.RabbitMqto verify publishing behavior against a real broker.Out of Scope