This library can be configured via your Django settings. Add
domain_event_broker.django to your
INSTALLED_APPS and set the
DOMAIN_EVENT_BROKER in your settings:
INSTALLED_APPS = ( 'domain_event_broker.django', ) DOMAIN_EVENT_BROKER = 'amqp://user:password@rabbitmq-host/domain-events'
None will deactivate communication with
RabbitMQ – essentially disabling domain event routing. This can be useful in
development and test environments where RabbitMQ is not available.
Domain events are published immediately. When emitting domain events from within a database transaction, it’s recommended to defer publishing until the transaction is committed. Using a commit hook avoids spurious domain events if a transaction is rolled back after an error.
We recommend using
publish_on_commit instead of using
publish_domain_event when you’re using Django.
Send domain event after transaction has been committed to the database. If there is no transaction, it’ll be sent right away. If atomic blocks are nested, it will be sent when exiting the outermost atomic block.
More information can be found here:
If you want to test a component in isolation that is publishing domain events,
we recommend mocking
testing subscribers, you can create
DomainEvent objects manually and
directly call the handler function.
Replaying dead-lettered domain events¶
If an event couldn’t be processed by an event handler it will end up in a dead-letter queue. There’s a Django management command that helps you reschedule processing of dead-lettered events:
django-admin replay_domain_event <handler-name>
The name is the one given to
Subscriber.register. The name is also used as
the queue name. If an event is dead lettered into
user-registeration-confirmation-dl, you’d call