# ukejejoseph/enterprise-dotnet-messaging architecture

> Architecture diagram of the GitHub repository ukejejoseph/enterprise-dotnet-messaging, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ukejejoseph/enterprise-dotnet-messaging
- Repository: https://github.com/ukejejoseph/enterprise-dotnet-messaging

## Overview

Chatter is a set of .NET libraries for in-process CQRS and brokered messaging. The principal workflow dispatches an application command to a handler, which may publish or send messages through the broker abstraction; a receiving service routes broker messages to its existing handlers. The README also documents query/event dispatch, recovery, durable Inbox/Outbox providers, and SQL change-feed notifications. The wiring of several unsampled subsystems is based on that documentation; uncertain implementation-level links are omitted.

Main entry points: [`src/Chatter.CQRS/src/Chatter.CQRS/MessageDispatcher.cs`](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/MessageDispatcher.cs) (Message Dispatcher), [`src/Chatter.CQRS/src/Chatter.CQRS/DependencyInjection/CqrsExtensions.cs`](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/DependencyInjection/CqrsExtensions.cs) (Handler Registration), [`src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Receiving/BrokeredMessageReceiver.cs`](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Receiving/BrokeredMessageReceiver.cs) (Broker Receiver), [`src/Chatter.CQRS/src/Chatter.CQRS/Queries/QueryDispatcher.cs`](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Queries/QueryDispatcher.cs) (Query Dispatcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cqrs["In-process CQRS"]
  node_dispatcher["Message Dispatcher"]
  node_pipeline["Command Pipeline"]
  node_query["Query Dispatcher<br/>[QueryDispatcher.cs]"]
  node_event["Event Dispatcher<br/>[EventDispatcher.cs]"]
  node_registration["Handler Registration<br/>[CqrsExtensions.cs]"]
  node_context["Handler Context"]
  node_diagnostics["Opt-in Diagnostics"]
end

subgraph group_broker["Brokered Messaging"]
  node_brokerextensions["Context Send/Publish"]
  node_external["External Dispatcher"]
  node_router["Broker Router<br/>[Routing]"]
  node_infrastructure["Infrastructure Dispatch"]
  node_receiver["Broker Receiver"]
end

subgraph group_transports["Transport Adapters"]
  node_asb["Azure Service Bus"]
  node_rabbit["RabbitMQ"]
  node_sqlbroker["SQL Service Broker"]
end

subgraph group_reliability["Durable Reliability"]
  node_efreliability["EF Inbox/Outbox"]
  node_cosmosreliability["Cosmos Inbox/Outbox<br/>[Reliability]"]
end

subgraph group_extensions["Change Feed"]
  node_sqldependency["SQL Change Feed"]
end

node_caller(("Application Caller"))
node_handler["Application Handler"]
node_broker["Message Broker"]
node_errorqueue["Error Queue"]
node_efstore[("Relational Store")]
node_cosmos[("Cosmos DB")]
node_sqlserver[("SQL Server")]

node_caller -->|"dispatches command"| node_dispatcher
node_dispatcher -->|"runs command"| node_pipeline
node_pipeline -->|"invokes handler"| node_handler
node_caller -->|"submits query"| node_query
node_query -->|"invokes query handler"| node_handler
node_caller -->|"dispatches event"| node_event
node_event -->|"fans out"| node_handler
node_registration -->|"registers services"| node_dispatcher
node_registration -->|"registers services"| node_query
node_registration -->|"registers services"| node_event
node_handler -->|"uses context"| node_context
node_context -->|"sends or publishes"| node_brokerextensions
node_brokerextensions -->|"dispatches externally"| node_external
node_external -->|"routes message"| node_router
node_router -->|"dispatches to transport"| node_infrastructure
node_asb -->|"receives or sends"| node_broker
node_rabbit -->|"receives or sends"| node_broker
node_sqlbroker -->|"receives or sends"| node_broker
node_broker -->|"delivers message"| node_receiver
node_receiver -->|"dispatches received message"| node_dispatcher
node_receiver -.->|"exceeds receive attempts"| node_errorqueue
node_efreliability -->|"stores inbox/outbox"| node_efstore
node_cosmosreliability -->|"stores and relays"| node_cosmos
node_sqldependency -->|"installs feed objects"| node_sqlserver
node_diagnostics -.->|"emits opt-in telemetry"| node_dispatcher

click node_dispatcher "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/MessageDispatcher.cs"
click node_pipeline "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Pipeline/CommandBehaviorPipeline.cs"
click node_query "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Queries/QueryDispatcher.cs"
click node_event "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Events/EventDispatcher.cs"
click node_registration "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/DependencyInjection/CqrsExtensions.cs"
click node_context "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Context/MessageHandlerContext.cs"
click node_brokerextensions "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Context/MessageHandlerContextExtensions.cs"
click node_external "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/IExternalDispatcher.cs"
click node_router "https://github.com/ukejejoseph/enterprise-dotnet-messaging/tree/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Routing"
click node_infrastructure "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/MessagingInfrastructure.cs"
click node_receiver "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Receiving/BrokeredMessageReceiver.cs"
click node_asb "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers.AzureServiceBus/src/Chatter.MessageBrokers.AzureServiceBus/Receiving/ServiceBusReceiver.cs"
click node_rabbit "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers.RabbitMQ/src/Chatter.MessageBrokers.RabbitMQ/Receiving/RabbitMqReceiver.cs"
click node_sqlbroker "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers.SqlServiceBroker/src/Chatter.MessageBrokers.SqlServiceBroker/Receiving/SqlServiceBrokerReceiver.cs"
click node_efreliability "https://github.com/ukejejoseph/enterprise-dotnet-messaging/tree/main/src/Chatter.MessageBrokers.Reliability.EntityFramework/src/Chatter.MessageBrokers.Reliability.EntityFramework"
click node_cosmosreliability "https://github.com/ukejejoseph/enterprise-dotnet-messaging/tree/main/src/Chatter.MessageBrokers.Reliability.Cosmos/src/Chatter.MessageBrokers.Reliability.Cosmos/Reliability"
click node_sqldependency "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.SqlChangeFeed/src/Chatter.SqlChangeFeed/SqlDependencyManager.cs"
click node_diagnostics "https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Diagnostics/ChatterDiagnostics.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_dispatcher,node_pipeline,node_query,node_event,node_registration,node_context,node_diagnostics toneBlue
class node_brokerextensions,node_external,node_router,node_infrastructure,node_receiver,node_efstore,node_cosmos,node_sqlserver toneAmber
class node_asb,node_rabbit,node_sqlbroker,node_handler toneMint
class node_efreliability,node_cosmosreliability,node_errorqueue toneRose
class node_sqldependency,node_caller,node_broker toneIndigo
```

## Components

### In-process CQRS

- [Message Dispatcher](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/MessageDispatcher.cs): `src/Chatter.CQRS/src/Chatter.CQRS/MessageDispatcher.cs`
- [Command Pipeline](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Pipeline/CommandBehaviorPipeline.cs): `src/Chatter.CQRS/src/Chatter.CQRS/Pipeline/CommandBehaviorPipeline.cs`
- [Query Dispatcher](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Queries/QueryDispatcher.cs): `src/Chatter.CQRS/src/Chatter.CQRS/Queries/QueryDispatcher.cs`
- [Event Dispatcher](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Events/EventDispatcher.cs): `src/Chatter.CQRS/src/Chatter.CQRS/Events/EventDispatcher.cs`
- [Handler Registration](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/DependencyInjection/CqrsExtensions.cs): `src/Chatter.CQRS/src/Chatter.CQRS/DependencyInjection/CqrsExtensions.cs`
- [Handler Context](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Context/MessageHandlerContext.cs): `src/Chatter.CQRS/src/Chatter.CQRS/Context/MessageHandlerContext.cs`
- [Opt-in Diagnostics](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/Diagnostics/ChatterDiagnostics.cs): `src/Chatter.CQRS/src/Chatter.CQRS/Diagnostics/ChatterDiagnostics.cs`

### Brokered Messaging

- [Context Send/Publish](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Context/MessageHandlerContextExtensions.cs): `src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Context/MessageHandlerContextExtensions.cs`
- [External Dispatcher](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.CQRS/src/Chatter.CQRS/IExternalDispatcher.cs): `src/Chatter.CQRS/src/Chatter.CQRS/IExternalDispatcher.cs`
- [Broker Router](https://github.com/ukejejoseph/enterprise-dotnet-messaging/tree/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Routing): `src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Routing`
- [Infrastructure Dispatch](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/MessagingInfrastructure.cs): `src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/MessagingInfrastructure.cs`
- [Broker Receiver](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Receiving/BrokeredMessageReceiver.cs): `src/Chatter.MessageBrokers/src/Chatter.MessageBrokers/Receiving/BrokeredMessageReceiver.cs`

### Transport Adapters

- [Azure Service Bus](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers.AzureServiceBus/src/Chatter.MessageBrokers.AzureServiceBus/Receiving/ServiceBusReceiver.cs): `src/Chatter.MessageBrokers.AzureServiceBus/src/Chatter.MessageBrokers.AzureServiceBus/Receiving/ServiceBusReceiver.cs`
- [RabbitMQ](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers.RabbitMQ/src/Chatter.MessageBrokers.RabbitMQ/Receiving/RabbitMqReceiver.cs): `src/Chatter.MessageBrokers.RabbitMQ/src/Chatter.MessageBrokers.RabbitMQ/Receiving/RabbitMqReceiver.cs`
- [SQL Service Broker](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.MessageBrokers.SqlServiceBroker/src/Chatter.MessageBrokers.SqlServiceBroker/Receiving/SqlServiceBrokerReceiver.cs): `src/Chatter.MessageBrokers.SqlServiceBroker/src/Chatter.MessageBrokers.SqlServiceBroker/Receiving/SqlServiceBrokerReceiver.cs`

### Durable Reliability

- [EF Inbox/Outbox](https://github.com/ukejejoseph/enterprise-dotnet-messaging/tree/main/src/Chatter.MessageBrokers.Reliability.EntityFramework/src/Chatter.MessageBrokers.Reliability.EntityFramework): `src/Chatter.MessageBrokers.Reliability.EntityFramework/src/Chatter.MessageBrokers.Reliability.EntityFramework`
- [Cosmos Inbox/Outbox](https://github.com/ukejejoseph/enterprise-dotnet-messaging/tree/main/src/Chatter.MessageBrokers.Reliability.Cosmos/src/Chatter.MessageBrokers.Reliability.Cosmos/Reliability): `src/Chatter.MessageBrokers.Reliability.Cosmos/src/Chatter.MessageBrokers.Reliability.Cosmos/Reliability`

### Change Feed

- [SQL Change Feed](https://github.com/ukejejoseph/enterprise-dotnet-messaging/blob/main/src/Chatter.SqlChangeFeed/src/Chatter.SqlChangeFeed/SqlDependencyManager.cs): `src/Chatter.SqlChangeFeed/src/Chatter.SqlChangeFeed/SqlDependencyManager.cs`

### Other components

- **Application Caller**
- **Application Handler**
- **Message Broker**
- **Error Queue**
- **Relational Store**
- **Cosmos DB**
- **SQL Server**

## Connections

- Application Caller → Message Dispatcher: dispatches command
- Message Dispatcher → Command Pipeline: runs command
- Command Pipeline → Application Handler: invokes handler
- Application Caller → Query Dispatcher: submits query
- Query Dispatcher → Application Handler: invokes query handler
- Application Caller → Event Dispatcher: dispatches event
- Event Dispatcher → Application Handler: fans out
- Handler Registration → Message Dispatcher: registers services
- Handler Registration → Query Dispatcher: registers services
- Handler Registration → Event Dispatcher: registers services
- Application Handler → Handler Context: uses context
- Handler Context → Context Send/Publish: sends or publishes
- Context Send/Publish → External Dispatcher: dispatches externally
- External Dispatcher → Broker Router: routes message
- Broker Router → Infrastructure Dispatch: dispatches to transport
- Azure Service Bus → Message Broker: receives or sends
- RabbitMQ → Message Broker: receives or sends
- SQL Service Broker → Message Broker: receives or sends
- Message Broker → Broker Receiver: delivers message
- Broker Receiver → Message Dispatcher: dispatches received message
- Broker Receiver → Error Queue: exceeds receive attempts
- EF Inbox/Outbox → Relational Store: stores inbox/outbox
- Cosmos Inbox/Outbox → Cosmos DB: stores and relays
- SQL Change Feed → SQL Server: installs feed objects
- Opt-in Diagnostics → Message Dispatcher: emits opt-in telemetry
