Same handlers. Any broker.
Chatter lets the same Command and Event handlers serve in-process dispatch and cross-service messaging over Azure Service Bus, RabbitMQ or SQL Server Service Broker.
Pause animation
Chatter.CQRS Dispatches Commands, Queries and Events in-process through the Message Dispatcher and a composable Command Pipeline.
NuGet
Chatter.MessageBrokers Brokered Message Receivers, sending and routing, Inbox/Outbox reliability and Recovery: Retry, Circuit Breaker, Error Queue.
NuGet
Chatter.MessageBrokers.AzureServiceBus Azure Service Bus transport: queue receivers, topic subscriptions, sessions and cross-entity transactions.
NuGet
Chatter.MessageBrokers.AzureServiceBus.Auth Microsoft Entra ID token authentication for the Azure Service Bus transport, including managed identity.
NuGet
Chatter.MessageBrokers.RabbitMQ RabbitMQ transport over externally provisioned exchanges and queues.
NuGet
Chatter.MessageBrokers.SqlServiceBroker SQL Server Service Broker transport over Service Broker conversations and queues you provision.
NuGet
Chatter.MessageBrokers.Reliability.EntityFramework EF Core Inbox, Outbox and Unit of Work, stored in your own DbContext.
NuGet
Chatter.MessageBrokers.Reliability.Cosmos Azure Cosmos DB Document Tier, Standalone Inbox Gate and change-feed Outbox Relay.
NuGet
Chatter.SqlChangeFeed Watched SQL Server table changes delivered as RowInsertedEvent, RowUpdatedEvent and RowDeletedEvent over SQL Server Service Broker.
NuGet
One PlaceOrder handler, reached through every Chatter package
A PlaceOrderHandler is reached in-process, then across services from a Storefront to an Orders service. Messages arrive over Azure Service Bus, RabbitMQ and SQL Server Service Broker, with Inbox and Outbox reliability, Recovery and a SQL change feed. Commands are checked against an Inbox in a Reliability.EntityFramework Receiver, and a duplicate delivery is skipped. Each message labelled with a package name checks that package off in the list beside the stage. The final frame shows the same handler behind all three transports and all 9 packages checked.
Storefront
Dispatch(PlaceOrder)
Orders service
Brokered Message Receiver
In-process
Orders service
Dispatch(PlaceOrder)
Message Dispatcher
Command Pipeline
CQRS
Across services
.AddMessageBrokers(...)
MessageBrokers
Across services
Azure Service Bus
.AddAzureServiceBus(...)
AzureServiceBus
Entra ID token
.UseAadTokenProviderWithManagedIdentity(...)
AzureServiceBus.Auth
Across services
RabbitMQ
.AddRabbitMq(...)
RabbitMQ
Across services
SQL Server Service Broker
.AddSqlServiceBroker(...)
SqlServiceBroker
Reliability
Outbox
commit
OrderPlaced Event
Billing service
EF Core · your DbContext
.WithInboxBehavior<OrdersDbContext>()
InboxMessages
MessageId
7f3a
ReceivedByInboxAtUtc
null
09:41:07
claimed
stamped
handler skipped
Outbox Processor
redelivery · 7f3a
Reliability.EntityFramework
Reliability
Cosmos DB · your container
.WithCosmosDocumentReliability<PlaceOrder>(...)
Inbox
Outbox
commit
Outbox Relay
OrderPlaced Event
Billing service
Reliability.Cosmos
Recovery
Retry
1
2
3
closed
open
Circuit Breaker
max receives exceeded
Error Queue
SQL change feed
SQL Server · Orders table
Trigger
INSERT INTO dbo.Orders (...)
SQL Server Service Broker
Event
IMessageHandler<RowInsertedEvent<OrderRow>>
.AddSqlChangeFeed<OrderRow>(...)
SqlChangeFeed
Same handlers. Any broker.
Inbox
Brokered Message Receiver
Azure Service Bus
.AddAzureServiceBus(...)
RabbitMQ
.AddRabbitMq(...)
SQL Server Service Broker
.AddSqlServiceBroker(...)
public class PlaceOrderHandler : IMessageHandler<PlaceOrder>
One handler follows a message through every feature, and each package is checked off as it is used.