# Paramore Brighter Documentation

## Paramore Brighter Documentation

- [README](https://brightercommand.gitbook.io/paramore-brighter-documentation/readme.md): Documentation for the Brighter and Darker projects.
- [Get Started with Brighter](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/getstarted.md): Brighter's tutorials are a ladder: four rungs, each one a working application, each one adding a single capability to the rung below it.
- [1. Your First Command](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/tutorialfirstcommand.md): Build a .NET console app that sends a command to its handler through Brighter's Command Processor, in-process, with no broker and no Docker.
- [2. Your First Message Over a Broker](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/tutorialfirstmessage.md): Send an event from one process, over a RabbitMQ exchange, to a second process that handles it.
- [3. Adding a Durable Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/tutorialdurableoutbox.md): Write your business data and the message announcing it in one Postgres transaction, then let the Sweeper deliver the message once that transaction has committed.
- [4. Streaming with Kafka](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/tutorialstreamingwithkafka.md): Send the same greeting over a three-partition Kafka topic, then start a second copy of the receiver and watch Kafka hand it half the partitions.
- [Why Brighter?](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/whybrighter.md): Brighter and Darker are two of many options open to a .NET developer who needs a command processor, a command dispatcher, or a messaging framework.
- [Basic Concepts](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/basicconcepts.md): A command is an instruction to carry out work.
- [Show me the code!](https://brightercommand.gitbook.io/paramore-brighter-documentation/get-started/showmethecode.md): There is an old principle: show don't tell, and this introduction is about showing you what you can do with Brighter and Darker.
- [Requests, Commands and Events](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/requests-commands-and-events.md): We use the term Request for a data object containing parameters that you want to dispatch to a handler.
- [Dispatching Requests](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/dispatchingarequest.md): Once you have implemented your Request Handler, you will want to dispatch Commands and Events to it synchronously, through the Command Processor.
- [Dispatching an Async Request](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/dispatchingarequest/asyncdispatcharequest.md): Once you have implemented your async Request Handler, you will want to dispatch Commands and Events to it through the Command Processor's asynchronous methods.
- [Returning Results from a Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/dispatchingarequest/returningresultsfromahandler.md): We use Command-Query separation so a Command does not have a return value and CommandDispatcher.Send() does not return anything.
- [How to Implement a Request Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/implementingahandler.md): To implement a handler, derive from RequestHandler\<T> where T should be the Command or Event derived type that you wish to handle.
- [How to Implement an Async Request Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/implementingahandler/implementingasynchandler.md): To implement an asynchronous handler, derive from RequestHandlerAsync\<T> where T should be the Command or Event derived type that you wish to handle.
- [Building a Pipeline of Request Handlers](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline.md): Once Brighter is dispatching requests to your handlers, you can insert orthogonal operations into the pipeline that runs around each handler.
- [Building an Async Pipeline of Request Handlers](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/buildinganasyncpipeline.md): An async pipeline wraps an async request handler in the same orthogonal operations a synchronous pipeline uses, with attributes whose handlers await.
- [Passing Information Between Handlers in the Pipeline](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/usingthecontextbag.md): A key constraint of the Pipes and Filters architectural style is that Filters do not share state.
- [Pipeline Validation and Diagnostics](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/pipelinevalidation.md): Brighter can validate your pipeline configuration at startup, catching common mistakes before any messages are sent or consumed.
- [Request Validation](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/requestvalidation.md): Brighter can validate a request in its handler pipeline before your business handler runs.
- [Feature Switches](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/featureswitches.md): We provide a FeatureSwitch Attribute and FeatureSwitchAsync Attribute that you can use on your IHandleRequests\<TRequest>.Handle() method, and IHandleRequests\<TRequest>.HandleAysnc() method.
- [Supporting Retry and Circuit Breaker](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/policyretryandcircuitbreaker.md): Brighter is a Command Processor and supports a pipeline of Handlers to handle orthogonal requests.
- [Migrating to Polly v8](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/policyretryandcircuitbreaker/migratingtopollyv8.md): Both tails of the Polly story in one place.
- [Failure and Fallback](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/buildingapipeline/policyfallback.md): A Fallback is a backstop exception handler, which runs when a request has failed and lets you take compensating action.
- [Agreement Dispatcher](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/agreementdispatcher.md): The Agreement Dispatcher is a pattern for routing requests to handlers dynamically based on the request's content or context, rather than using a fixed type-to-handler mapping.
- [Agreement Dispatcher Routing](https://brightercommand.gitbook.io/paramore-brighter-documentation/commands-handlers-and-pipelines/agreementdispatcher/agreementdispatcherrouting.md): Why you would route a request by its content rather than its type, what that buys you, and what it costs.
- [Basic Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/brighterbasicconfiguration.md): Configuration is the most labor-intensive part of using Brighter.
- [Command Processor Configuration Reference](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/brighterbasicconfiguration/commandprocessorconfigurationreference.md): Every option for configuring a Brighter Command Processor, in one place.
- [Dispatcher Configuration Reference](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/brighterbasicconfiguration/dispatcherconfigurationreference.md): Every option for configuring a Brighter Dispatcher, in one place.
- [Relational Database Configuration Reference](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/brighterbasicconfiguration/relationaldatabaseconfigurationreference.md): RelationalDatabaseConfiguration is the one type that configures every relational Outbox, Inbox, provisioner and queue-table transport Brighter ships.
- [InMemory Options for Development and Testing](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/inmemoryoptions.md): Brighter V10 provides a comprehensive suite of in-memory implementations for key components, making it easy to develop and test applications without external dependencies.
- [Test Double Options for Command Processor](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/testdoubleoptions.md): When handlers depend on IAmACommandProcessor to publish events or send commands, you need a way to verify those interactions in tests.
- [Analyzer Support](https://brightercommand.gitbook.io/paramore-brighter-documentation/brighter-configuration/analyzersupport.md): Brighter provides Roslyn analyzers that detect common configuration and message-mapping mistakes while you write and build your application.
- [Using an External Bus](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/implementingexternalbus.md): Brighter provides support for an External Bus.
- [Routing](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/routing.md): A producer routes messages to subscribers by setting a Topic on the MessageHeader.
- [Message Mappers](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/messagemappers.md): A message mapper turns domain code into a Brighter Message.
- [Default Message Mappers](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/messagemappers/defaultmessagemappers.md): You do not need to implement IAmAMessageMapper for every message type.
- [Message Transforms](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/messagemappers/messagetransforms.md): A transform is middleware in the mapping pipeline, and Brighter finds it by reflecting over the attributes on your mapper's MapToMessage and MapToRequest methods.
- [Cloud Events Support](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/cloudeventssupport.md): CloudEvents is a CNCF specification for describing event data in a common, standardized way.
- [CloudEvents Reference](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/cloudeventssupport/cloudeventsreference.md): CloudEvents defines both required and optional attributes for events.
- [Claim Check](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/claimcheck.md): The Claim Check pattern helps us reduce the size of our messages, without losing information that we need to exchange.
- [Handle a Large Message](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/claimcheck/handlinglargemessages.md): When a message body outgrows what your transport will carry, a claim check stores the payload elsewhere and sends a token in its place.
- [S3 Luggage Store](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/claimcheck/s3luggagestore.md): The S3LuggageStore is an implementation of IAmAStorageProviderAsync for AWS S3 Object Storage.
- [Compression](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/compression.md): The Compression transform helps us reduce the size of a message using a compression algorithm.
- [Dynamic Message Deserialization](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/dynamicmessagedeserialization.md): Brighter supports dynamic type resolution, allowing you to route multiple message types through a single channel.
- [Routing Multiple Message Types](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/dynamicmessagedeserialization/routingmultiplemessagetypes.md): The most common approach for dynamic deserialization is using the CloudEvents type attribute.
- [AsyncAPI Document Generation](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/asyncapisupport.md): Brighter can automatically generate AsyncAPI 3.0 documents from your service's runtime configuration.
- [Error Handling](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/handlerfailure.md): When your handler throws an exception on the External Bus, Brighter's message pump catches it and decides what to do with the message.
- [Error Handling Options](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/handlerfailure/errorhandlingoptions.md): Brighter's message pump uses Subscription properties to control how it handles errors.
- [Handle a Poison Message](https://brightercommand.gitbook.io/paramore-brighter-documentation/using-an-external-bus/handlerfailure/handlingpoisonmessages.md): A poison message is one that fails every time you process it, and this guide routes it to a dead letter queue instead of letting it block the channel.
- [RabbitMQ Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/rabbitmqconfiguration.md): RabbitMQ is OSS message-oriented-middleware and is well documented.
- [RabbitMQ Durability: Quorum Queues and Persistence](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/rabbitmqconfiguration/rabbitmqdurability.md): RabbitMQ offers two independent durability mechanisms, and they answer different questions.
- [Migrating to Quorum Queues](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/rabbitmqconfiguration/rabbitmqmigratetoquorumqueues.md): This guide moves an existing Brighter subscription from a classic queue to a quorum queue, and enables message persistence alongside it.
- [RabbitMQ Connection Stability](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/rabbitmqconfiguration/rabbitmqconnectionstability.md): V10 includes improvements to RabbitMQ connection handling and error recovery, making applications more resilient to network issues and broker restarts.
- [Kafka Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/kafkaconfiguration.md): Kafka is OSS message-oriented-middleware and is well documented.
- [AWS SNS and SQS Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/awssqsconfiguration.md): SNS and SQS are proprietary message-oriented-middleware available on the AWS platform.
- [Migrating AWS SQS to V10](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/awssqsconfiguration/awssqsmigratetov10.md): Brighter provides support for both version 3 and version 4 of the AWS SDK for .NET through separate NuGet packages.
- [Azure Service Bus Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/azureservicebusconfiguration.md): Azure Service Bus (ASB) is a fully managed enterprise message broker and is well documented Brighter handles the details of sending to or receiving from ASB.
- [PostgreSQL Message Broker](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/postgresqlmessagebroker.md): Brighter supports for using PostgreSQL as a message broker, enabling pub/sub messaging patterns using your existing PostgreSQL infrastructure.
- [PostgreSQL Broker Trade-Offs](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/postgresqlmessagebroker/postgresqlbrokertradeoffs.md): This page is what you read when deciding whether to use PostgreSQL as a broker at all: what it buys you, where it runs out, how it stores a payload, and how it compares with the dedicated brokers.
- [PostgreSQL for Transport and Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/postgresqlmessagebroker/postgresqltransportandoutbox.md): One PostgreSQL database can be both your message broker and your Outbox, so the business write and the message announcing it commit in a single transaction.
- [MSSQL Message Broker](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/mssqlmessagebroker.md): The MSSQL message broker turns a SQL Server table into a queue, so an application that already has a database can send messages between processes without adding a broker to its infrastructure.
- [MSSQL for Transport, Outbox and Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/mssqlmessagebroker/mssqltransportinboxandoutbox.md): One SQL Server database can carry your message queue, your Outbox and your Inbox together, sharing a single connection string and one configuration object.
- [GCP Pub/Sub Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/gcppubsubconfiguration.md): Google Cloud Pub/Sub is a managed publish-subscribe service, and Brighter configures it with a gateway connection, a publication per topic, and a subscription per consumer.
- [RocketMQ Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/rocketmqconfiguration.md): Apache RocketMQ is a distributed messaging platform, and Brighter configures it with a gateway connection wrapping the RocketMQ client, a publication per topic, and a subscription per consumer group.
- [MQTT Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/mqttconfiguration.md): MQTT is a lightweight publish-subscribe protocol for constrained networks, and Brighter configures it with a gateway configuration for each side of the wire and a subscription per consumer.
- [Redis Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/redisconfiguration.md): Brighter's Redis transport turns a Redis list into a queue, and configures it with a gateway configuration shared by producers and consumers and a subscription per consumer.
- [InMemory Transport](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/inmemorytransport.md): The in-process transport: when to use it, how to configure it, a complete example, and its limits.
- [Brighter Control API](https://brightercommand.gitbook.io/paramore-brighter-documentation/transports/brightercontrolapi.md): The Brighter Control API allows direct management of a Dispatcher node.
- [Outbox Support](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport.md): Brighter supports storing messages that are sent via an External Bus in an Outbox, as per the Outbox Pattern.
- [MSSQL Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/mssqloutbox.md): The MSSQL Outbox provides a message store for the Transactional Outbox pattern using a Microsoft SQL Server database.
- [MySQL Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/mysqloutbox.md): The MySQL Outbox provides a message store for the Transactional Outbox pattern using a MySQL database.
- [Postgres Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/postgresoutbox.md): The PostgreSQL Outbox provides a message store for the Transactional Outbox pattern using a PostgreSQL database.
- [Sqlite Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/sqliteoutbox.md): The SQLite Outbox provides a message store for the Transactional Outbox pattern using a SQLite database.
- [Dapper Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/dapperoutbox.md): The Dapper Outbox allows integration between Dapper and Brighter's outbox support.
- [EF Core Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/efcoreoutbox.md): The EFCore Outbox allows integration between EF Core and Brighter's outbox support.
- [Dynamo Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/dynamooutbox.md): The DynamoDb Outbox allows integration between DynamoDb and Brighter's outbox support.
- [MongoDb Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/mongodboutbox.md): The MongoDB Outbox allows integration between MongoDB and Brighter's outbox support.
- [Firestore Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/firestoreoutbox.md): The Firestore Outbox stores messages in a Google Cloud Firestore collection, so a message and the business write that produced it commit together.
- [Spanner Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/spanneroutbox.md): The Spanner Outbox stores messages in a Google Cloud Spanner table, and it is configured entirely through the shared relational configuration.
- [InMemory Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighteroutboxsupport/inmemoryoutbox.md): The in-process Outbox: flushing, compaction, configuration and limits.
- [Transactional Messaging with the Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/transactionalmessagingwiththeoutbox.md): This section provides a complete example showing both producer and consumer using transactional messaging with the Outbox and Inbox patterns.
- [Outbox Archiver](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/outboxarchiver.md): The Outbox Archiver is a background service that monitors an Outbox and moves messages older than a certain age into long-term storage, keeping your Outbox small.
- [Azure Blob Archive Provider](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/outboxarchiver/azureblobarchiveprovider.md): The Azure Blob Archive Provider writes the messages the Outbox Archiver takes from your Outbox into an Azure Blob Storage container.
- [Azure Archive Provider Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/outboxarchiver/azureblobarchiveprovider/azureblobconfiguration.md): The Azure Archive Provider writes messages swept from your Outbox into an Azure Blob Storage container.
- [Sweeper Circuit Breaking](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/sweepercircuitbreaking.md): Sweeper Circuit Breaking is a resilience feature that prevents failures to publish to one topic from blocking attempts to publish to other topics, when publishing messages from the Outbox.
- [Using Sweeper Circuit Breaking](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/sweepercircuitbreaking/usingsweepercircuitbreaking.md): How to wire circuit breaking into an Outbox Sweeper, tune its cooldown, and extend it with your own or a distributed breaker.
- [Inbox Support](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport.md): Messaging makes the guaranteed, at least once promise.
- [MSSQL Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/mssqlinbox.md): The MSSQL Inbox allows use of MSSQL for Brighter's inbox support.
- [MySQL Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/mysqlinbox.md): The MySQL Inbox allows use of MySQL for Brighter's inbox support.
- [Postgres Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/postgresinbox.md): The Postgres Inbox allows use of Postgres for Brighter's inbox support.
- [Sqlite Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/sqliteinbox.md): The Sqlite Inbox allows use of Sqlite for Brighter's inbox support.
- [Dynamo Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/dynamoinbox.md): The DynamoDb Inbox allows use of DynamoDb for Brighter's inbox support.
- [MongoDb Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/mongodbinbox.md): The MongoDB Inbox allows use of MongoDB for Brighter's inbox support.
- [Firestore Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/firestoreinbox.md): The Firestore Inbox records the messages a consumer has already handled in a Google Cloud Firestore collection, so a redelivery is recognised rather than reprocessed.
- [Spanner Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/spannerinbox.md): The Spanner Inbox records the messages a consumer has already handled in a Google Cloud Spanner table, so a redelivery is recognised rather than reprocessed.
- [InMemory Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/brighterinboxsupport/inmemoryinbox.md): The in-process Inbox: when to use it, how to configure it, and its limits.
- [Replay On Seen](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/replayonseen.md): When your Inbox recognises a message it has already handled, it normally throws or logs a warning and stops — the work is done, so there is nothing to do.
- [Turning On Replay On Seen](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/replayonseen/turningonreplayonseen.md): This page is the procedure: what to switch on, what you must thread through your code, what to check before you enable it, and a worked example.
- [Replay On Seen Reference](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/replayonseen/replayonseenreference.md): Which stores support Replay On Seen, the cases where it does not fire, the events it emits, and its limitations.
- [Causation Tracking in a Custom Store](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/causationtrackingstores.md): Replay On Seen needs two things from your storage.
- [Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock.md): A distributed lock lets multiple instances of your application coordinate so that only one of them performs a given task at a time.
- [DynamoDB Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/dynamodbdistributedlock.md): The DynamoDB locking provider implements Brighter's distributed lock on top of Amazon DynamoDB, so a single Outbox Sweeper and Archiver run when you scale out.
- [Postgres Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/postgresdistributedlock.md): The Postgres locking provider implements Brighter's distributed lock using PostgreSQL advisory locks, so a single Outbox Sweeper and Archiver run when you scale out.
- [MSSQL Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/mssqldistributedlock.md): The MS SQL locking provider implements Brighter's distributed lock using SQL Server application locks (sp\_getapplock / sp\_releaseapplock).
- [MySQL Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/mysqldistributedlock.md): The MySQL locking provider implements Brighter's distributed lock using MySQL's named locks (GET\_LOCK / RELEASE\_LOCK), so a single Outbox Sweeper and Archiver run when you scale out.
- [Azure Blob Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/azureblobdistributedlock.md): The Azure Blob locking provider implements Brighter's distributed lock using blob leases in Azure Blob Storage, so a single Outbox Sweeper and Archiver run when you scale out.
- [MongoDB Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/mongodbdistributedlock.md): The MongoDB locking provider implements Brighter's distributed lock by writing lock documents to a MongoDB collection, so a single Outbox Sweeper and Archiver run when you scale out.
- [Firestore Distributed Lock](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/distributedlock/firestoredistributedlock.md): The Firestore locking provider implements Brighter's distributed lock using Google Cloud Firestore, so a single Outbox Sweeper and Archiver run when you scale out.
- [Box Provisioning](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/boxprovisioning.md): BoxProvisioning is the Brighter library that creates and migrates your Outbox and Inbox tables at application startup.
- [Configuring Box Provisioning](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/boxprovisioning/boxprovisioningconfiguration.md): This page is the how-to companion to Box Provisioning.
- [Upgrading Existing Deployments](https://brightercommand.gitbook.io/paramore-brighter-documentation/outbox-and-inbox/boxprovisioning/boxprovisioningupgrade.md): This page is for operators of a pre-existing Brighter deployment who are adopting Database Provisioning for the first time.
- [Scheduler](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport.md): In distributed applications, it is often necessary to schedule messages for deferred execution—whether for implementing delayed workflows, retry mechanisms, or time-based business processes.
- [InMemory Scheduler](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport/inmemoryscheduler.md): The InMemory Scheduler is a lightweight, timer-based scheduling implementation provided by Brighter for testing, development, and demonstration purposes.
- [Hangfire](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport/hangfirescheduler.md): Hangfire is one of the most widely used background job processing libraries in the .NET community, featuring a built-in monitoring dashboard.
- [Quartz](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport/quartzscheduler.md): Quartz.NET is one of the most widely used enterprise-grade scheduling libraries in the .NET community.
- [TickerQ](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport/tickerqscheduler.md): TickerQ is a high-performance, reflection-free background task scheduler for .NET that uses source generators.
- [Aws Scheduler](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport/awsscheduler.md): AWS EventBridge Scheduler is a fully managed, serverless service on AWS that allows you to create, run, and manage scheduled tasks at scale.
- [Azure Scheduler](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/brighterschedulersupport/azurescheduler.md): Azure Service Bus includes native support for scheduled message delivery using the ScheduledEnqueueTimeUtc property.
- [Scheduling a Message](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/schedulingamessage.md): This page shows you how to schedule a message or request for deferred execution, how to cancel one you have already scheduled, and how to configure each scheduler for the job.
- [Switching Schedulers](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/switchingschedulers.md): This page shows you how to move an existing application from one Brighter scheduler to another.
- [Custom Scheduler](https://brightercommand.gitbook.io/paramore-brighter-documentation/scheduler/customscheduler.md): To add support for a different scheduler provider, implement the appropriate interfaces based on your use case.
- [Darker Basic Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/darkerbasicconfiguration.md): Darker is the query-side counterpart to Brighter, implementing the Query Object pattern for CQRS (Command Query Responsibility Segregation) architectures.
- [Darker Configuration Reference](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/darkerbasicconfiguration/darkerconfigurationreference.md): The options AddDarker and AddHandlersFromAssemblies take: the query processor's service lifetime, and the strategies available for registering handlers.
- [Queries and Query Objects](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/queriesandqueryobjects.md): The Query Object pattern separates the parameters of a query from the execution of that query.
- [Query Result Types](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/queriesandqueryobjects/queryresulttypes.md): The result type specified in IQuery\<TResult> can be any C# type.
- [Query Object Validation](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/queriesandqueryobjects/queryobjectvalidation.md): Query objects should validate their parameters to ensure they receive valid data.
- [How to Implement a Query Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/implementaqueryhandler.md): Query handlers are the entry point to your query execution logic in Darker.
- [Query Handler Dependencies](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/implementaqueryhandler/queryhandlerdependencies.md): Query handlers typically need dependencies like repositories, database contexts, or services to execute queries.
- [Testing Query Handlers](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/implementaqueryhandler/testingqueryhandlers.md): Query handlers are easy to test because they have clear inputs (queries) and outputs (results), with dependencies that can be mocked or replaced.
- [Query Pipeline and Decorators](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypipeline.md): The Query Pipeline in Darker provides a powerful way to add cross-cutting concerns to your query handlers without modifying the handler code itself.
- [Query Pipeline Policies](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypipeline/querypipelinepolicies.md): Darker's policy decorators are powered by Polly, a .NET resilience and transient-fault-handling library.
- [Darker and Brighter Pipelines](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypipeline/darkerandbrighterpipelines.md): Darker's query pipeline shares many similarities with Brighter's request pipeline, as both implement the same Russian Doll Model for middleware composition.
- [Query Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypatterns.md): This guide presents common query patterns you'll encounter when building real-world applications with Darker.
- [Parameterized Query Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypatterns/parameterizedquerypatterns.md): Query recipes that take parameters: looking up a single entity, filtering a list, and searching on several criteria at once.
- [Pagination Query Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypatterns/paginationquerypatterns.md): How to page through a large result set in Darker, by offset and by cursor, with the trade-offs of each.
- [Projection Query Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypatterns/projectionquerypatterns.md): How to return only the fields a caller needs: simple projections, projections across joins, and calculated fields.
- [Collection and Aggregation Query Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypatterns/aggregationquerypatterns.md): How to return whole collections, counts, and summary statistics from a query handler.
- [Entity Framework Core Query Integration](https://brightercommand.gitbook.io/paramore-brighter-documentation/darker/querypatterns/efcorequeryintegration.md): How to run Darker queries against Entity Framework Core: tracking, eager loading, handler lifetime and compiled queries.
- [Logging](https://brightercommand.gitbook.io/paramore-brighter-documentation/health-checks-and-observability/logging.md): Brighter writes its diagnostics through Microsoft.Extensions.Logging, and takes its ILoggerFactory from a single static holder rather than from your container.
- [Monitoring](https://brightercommand.gitbook.io/paramore-brighter-documentation/health-checks-and-observability/monitoring.md): A monitored handler posts an event to a control bus as it is entered and exited, so you can watch what your handlers do from outside the process.
- [Health Checks](https://brightercommand.gitbook.io/paramore-brighter-documentation/health-checks-and-observability/healthchecks.md): Brighter provides an AspNet Core Health check for the Dispatcher.
- [Telemetry](https://brightercommand.gitbook.io/paramore-brighter-documentation/health-checks-and-observability/telemetry.md): Brighter provides comprehensive OpenTelemetry integration for distributed tracing across message boundaries, enabling end-to-end observability in distributed systems.
- [Configuring OpenTelemetry](https://brightercommand.gitbook.io/paramore-brighter-documentation/health-checks-and-observability/telemetry/configuringopentelemetry.md): The OpenTelemetry SDK can be configured to listen to Activities emitted by Brighter.
- [V10 Migration Guide](https://brightercommand.gitbook.io/paramore-brighter-documentation/v10-migration/v10migrationguide.md): Brighter V10 introduces significant improvements and new features while maintaining a clear migration path from V9.
- [Nullable Reference Types](https://brightercommand.gitbook.io/paramore-brighter-documentation/v10-migration/nullablereferencetypes.md): V10 enables nullable reference types across all Brighter projects, providing improved type safety and helping prevent null reference exceptions.
- [Migrating to Nullable Reference Types](https://brightercommand.gitbook.io/paramore-brighter-documentation/v10-migration/nullablereferencetypes/migratingtonullablereferencetypes.md): Four steps to turn nullable reference types on in a project that uses Brighter.
- [Command, Processor and Dispatcher Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/commandscommanddispatcherandprocessor.md): The Command design pattern encapsulates a request as an object, allowing reuse, queuing or logging of requests, or undoable operations.
- [Using a Task Queue](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/taskqueuepattern.md): The Task Queue Pattern let's you use an External Bus to handle work asynchronously.
- [Microservices](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/microservices.md): It is possible to think of microservices as 3rd generation SOA.
- [Event Driven Collaboration](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/eventdrivencollaboration.md): Event Driven Architectures (EDA) are a major use case for Brighter's External Bus-you want processes to collaborate via messaging.
- [Event Carried State Transfer](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/eventcarriedstatetransfer.md): In his white paper "Data on the Outside vs. Data on the Inside", Pat Helland classifies data according to whether it exists inside a service boundary or outside that boundary.
- [Outbox Pattern](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/outboxpattern.md): The Outbox Pattern is what stops a state change and the event announcing it from diverging.
- [CQRS with Brighter and Darker](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/cqrswithbrighteranddarker.md): Command Query Responsibility Segregation (CQRS) separates the handling of commands, which change state, from queries, which read it.
- [CQRS Use Cases and Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/cqrswithbrighteranddarker/cqrsusecasesandpatterns.md): Four shapes a CQRS system takes in practice, from a single database with two models to event-sourced writes with projected reads.
- [How the Command Processor Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/howbrighterworks.md): You don't need to understand how Brighter works under the hood to use it, but if you want to debug, or contribute to the project, it can help to know what is going on.
- [How Configuring the Command Processor Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/howbrighterworks/howconfiguringthecommandprocessorworks.md): Brighter does not have a dependency on an Inversion Of Control (IoC) framework.
- [How the Dispatcher Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/howserviceactivatorworks.md): The Dispatcher is the component in the Brighter.ServiceActivator assembly that orchestrates your Performers.
- [How Configuring a Dispatcher for an External Bus Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/howserviceactivatorworks/howconfiguringthedispatcherworks.md): In order to receive messages from Message Oriented Middleware (MoM) such as RabbitMQ or Kafka you have to configure a Dispatcher.
- [Reactor and Proactor: Concurrency Models](https://brightercommand.gitbook.io/paramore-brighter-documentation/understanding-brighter/reactorandproactor.md): Brighter V10 introduces clearer terminology for its concurrency models: Reactor and Proactor.
- [Glossary](https://brightercommand.gitbook.io/paramore-brighter-documentation/reference/glossary.md): This glossary provides definitions for key terms used in Brighter and Darker.
- [FAQ](https://brightercommand.gitbook.io/paramore-brighter-documentation/reference/faq.md): This FAQ addresses common questions about using Brighter and Darker, organized by category.

## V9 Paramore Brighter Documentation

- [README](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/readme.md): Brighter V9 (superseded). Documentation for the Brighter and Darker projects.
- [Show me the code!](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/overview/showmethecode.md): Brighter V9 (superseded). There is an old principle: show don't tell, and this introduction is about showing you what you can do with Brighter and Darker.
- [Basic Concepts](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/overview/basicconcepts.md): Brighter V9 (superseded). A command is an instruction to carry out work.
- [Why Brighter?](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/overview/whybrighter.md): Brighter V9 (superseded). There are many options for .NET developers looking for either a package to use as a command processor/dispatcher pattern implementation (sometimes confused with the…
- [Basic Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/brighterbasicconfiguration.md): Brighter V9 (superseded). Configuration is the most labor-intensive part of using Brighter.Once you have configured Brighter, using its model of requests and handlers is straightforward
- [How Configuring the Command Processor Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/howconfiguringthecommandprocessorworks.md): Brighter V9 (superseded). Brighter does not have a dependency on an Inversion Of Control (IoC) framework.
- [How Configuring a Dispatcher for an External Bus Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/howconfiguringthedispatcherworks.md): Brighter V9 (superseded). In order to receive messages from Message Oriented Middleware (MoM) such as RabbitMQ or Kafka you have to configure a Dispatcher.
- [RabbitMQ Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/rabbitmqconfiguration.md): Brighter V9 (superseded). RabbitMQ is OSS message-oriented-middleware and is well documented.
- [AWS SNS Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/awssqsconfiguration.md): Brighter V9 (superseded). SNS and SQS are proprietary message-oriented-middleware available on the AWS platform.
- [Kafka Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/kafkaconfiguration.md): Brighter V9 (superseded). Kafka is OSS message-oriented-middleware and is well documented.
- [Azure Service Bus Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/azureservicebusconfiguration.md): Brighter V9 (superseded). Azure Service Bus (ASB) is a fully managed enterprise message broker and is well documented Brighter handles the details of sending to or receiving from ASB.
- [Azure Archive Provider Configuration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/azureblobconfiguration.md): Brighter V9 (superseded). Azure Service Bus (ASB) is a fully managed enterprise message broker and is well documented Brighter handles the details of sending to or receiving from ASB.
- [Brighter Control API](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-configuration/brightercontrolapi.md): Brighter V9 (superseded). The brighter control API allows direct management of a Service Activator node
- [Building an Async Pipeline of Request Handlers](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/buildinganasyncpipeline.md): Brighter V9 (superseded). Once you are using the features of Brighter to act as a command dispatcher and send or publish messages to a target handler, you may want to use its command processor…
- [How to Implement a Request Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/implementingahandler.md): Brighter V9 (superseded). To implement a handler, derive from RequestHandler\<T> where T should be the Command or Event derived type that you wish to handle.
- [How to Implement an Async Request Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/implementingasynchandler.md): Brighter V9 (superseded). To implement an asynchronous handler, derive from RequestHandlerAsync\<T> where T should be the Command or Event derived type that you wish to handle.
- [Requests, Commands and an Events](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/requests-commands-and-events.md): Brighter V9 (superseded). We use the term Request for a data object containing parameters that you want to dispatch to a handler.
- [Dispatching Requests](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/dispatchingarequest.md): Brighter V9 (superseded). Once you have implemented your Request Handler, you will want to dispatch Commands or Events to that Handler.
- [Dispatching An Async Request](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/asyncdispatcharequest.md): Brighter V9 (superseded). Once you have implemented your Request Handler, you will want to dispatch Commands or Events to that Handler.
- [Returning results from a Handler](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/returningresultsfromahandler.md): Brighter V9 (superseded). We use Command-Query separation so a Command does not have return value and CommandDispatcher.Send() does not return anything.
- [Using an External Bus](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/implementingexternalbus.md): Brighter V9 (superseded). Brighter provides support for an External Bus.
- [Message Mappers](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/messagemappers.md): Brighter V9 (superseded). A message mapper turns domain code into a Brighter Message.
- [Claim Check](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/claimcheck.md): Brighter V9 (superseded). The Claim Check pattern helps us reduce the size of our messages, without losing information that we need to exchange.
- [Compression](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/compression.md): Brighter V9 (superseded). The Compression transform helps us reduce the size of a message using a compression algorithm.
- [S3 Luggage Store](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/s3luggagestore.md): Brighter V9 (superseded). The S3LuggageStore is an implementation of IAmAStorageProviderAsync for AWS S3 Object Storage.
- [Routing](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/routing.md): Brighter V9 (superseded). A producer routes messages to subscribers by setting a Topic on the MessageHeader.
- [Building a Pipeline of Request Handlers](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/buildingapipeline.md): Brighter V9 (superseded). Once you are using the features of Brighter to act as a command dispatcher and send or publish messages to a target handler, you may want to use its command processor…
- [Passing information between Handlers in the Pipeline](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/usingthecontextbag.md): Brighter V9 (superseded). A key constraint of the Pipes and Filters architectural style is that Filters do not share state.
- [Failure and Dead Letter Queues](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/handlerfailure.md): Brighter V9 (superseded). When a Request is passed to RequestHandler.Handle() it runs in your application code.
- [Supporting Retry and Circuit Breaker](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/policyretryandcircuitbreaker.md): Brighter V9 (superseded). Brighter is a Command Processor and supports a pipeline of Handlers to handle orthogonal requests.
- [Failure and Fallback](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/policyfallback.md): Brighter V9 (superseded). You may want some sort of backstop exception handler, that allows you to take compensating action, such as undoing any partially committed work, issuing a compensating…
- [Feature Switches](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/brighter-request-handlers-and-middleware-pipelines/featureswitches.md): Brighter V9 (superseded). We provide a FeatureSwitch Attribute and FeatureSwitchAsync Attribute that you can use on your IHandleRequests\<TRequest>.Handle() method, and…
- [Outbox Support](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/brighteroutboxsupport.md): Brighter V9 (superseded). Brighter supports storing messages that are sent via an External Bus in an Outbox, as per the Outbox Pattern
- [Inbox Support](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/brighterinboxsupport.md): Brighter V9 (superseded). Messaging makes the guaranteed, at least once promise.
- [EFCore Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/efcoreoutbox.md): Brighter V9 (superseded). The EFCore Outbox allows integration between EF Core and Brighter's outbox support.
- [Dapper Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/dapperoutbox.md): Brighter V9 (superseded). The Dapper Outbox allows integration between Dapper and Brighter's outbox support.
- [Dynamo Outbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/dynamooutbox.md): Brighter V9 (superseded). The DynamoDb Outbox allows integration between DynamoDb and Brighter's outbox support.
- [MSSQL Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/mssqlinbox.md): Brighter V9 (superseded). The MSSQL Inbox allows use of MSSQL for Brighter's inbox support.
- [MySQL Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/mysqlinbox.md): Brighter V9 (superseded). The MySQL Inbox allows use of MySQL for Brighter's inbox support.
- [Postgres Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/postgresinbox.md): Brighter V9 (superseded). The Postgres Inbox allows use of Postgres for Brighter's inbox support.
- [Sqlite Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/sqliteinbox.md): Brighter V9 (superseded). The Sqlite Inbox allows use of Sqlite for Brighter's inbox support.
- [Dynamo Inbox](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/dynamoinbox.md): Brighter V9 (superseded). The DynamoDb Inbox allows use of DynamoDb for Brighter's inbox support.
- [Azure Blob Archive Provider](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/guaranteed-at-least-once/azureblobarchiveprovider.md): Brighter V9 (superseded). The Azure Blob Archive Provider is a provider for Outbox Archiver.
- [Monitoring](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/health-checks-and-observability/monitoring.md): Brighter V9 (superseded). Brighter emits monitoring information from an External Bus using a configured Control Bus
- [Health Checks](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/health-checks-and-observability/healthchecks.md): Brighter V9 (superseded). Brighter provides an AspNet Core Health check for Service Activator
- [Telemetry](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/health-checks-and-observability/telemetry.md): Brighter V9 (superseded). Starting in version 9.2.1 Brighter now supports Open Telemetry Tracing
- [Command, Processor and Dispatcher Patterns](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/command-processors-and-dispatchers/commandscommanddispatcherandprocessor.md): Brighter V9 (superseded). The Command design pattern encapsulates a request as an object, allowing reuse, queuing or logging of requests, or undoable operations.
- [How The Command Processor Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/under-the-hood/howbrighterworks.md): Brighter V9 (superseded). You don't need to understand how Brighter works under the hood to use it, but if you want to debug, or contribute to the project, it can help to know what is going on.
- [How Service Activator Works](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/under-the-hood/howserviceactivatorworks.md): Brighter V9 (superseded). Coming Soon...
- [Microservices](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/event-driven-architectures/microservices.md): Brighter V9 (superseded). It is possible to think of microservices as 3rd generation SOA.
- [Event Driven Collaboration](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/event-driven-architectures/eventdrivencollaboration.md): Brighter V9 (superseded). Event Driven Architectures (EDA) are a major use case for Brighter's External Bus-you want processes to collaborate via messaging.
- [Event Carried State Transfer](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/event-driven-architectures/eventcarriedstatetransfer.md): Brighter V9 (superseded). In his white paper "Data on the Outside vs. Data on the Inside", Pat Helland classifies data according to whether it exists inside a service boundary or outside that…
- [Outbox Pattern](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/event-driven-architectures/outboxpattern.md): Brighter V9 (superseded). When a microservice changes the state for which it is the system of record, and then signals to subscribers via an event that it has changed its state, how do we ensure…
- [Using a Task Queue](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/task-queues/taskqueuepattern.md): Brighter V9 (superseded). The Task Queue Pattern let's you use an External Bus to handle work asynchronously.
- [FAQ](https://brightercommand.gitbook.io/paramore-brighter-documentation/v9-paramore-brighter-documentation/faq/faq.md): Brighter V9 (superseded). When should you use an asynchronous pipeline to handle work and when should you use an External Bus.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
This site has an agentic ask interface you may use to query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://brightercommand.gitbook.io/paramore-brighter-documentation/index.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.
