I think extensive orchestration leads to the orchestrator becoming a single point of failure. If the orchestrator starts converting events to commands then soon it starts storing state and becomes a big ball of mud.
My preferred form of orchestrator is a gatekeeper. A gatekeeper does three things only:
- maintains a table of which service consumes which events and why
- copies events from the outgoing queues to the dedicated incoming queues according to the routing table (or controls access to the incoming queues via RBAC)
- logs the metadata about the messages it has seen
It doesn't inspect the messages in any way, store them or maintain any runtime state at all.
My preferred form of orchestrator is a gatekeeper. A gatekeeper does three things only:
- maintains a table of which service consumes which events and why - copies events from the outgoing queues to the dedicated incoming queues according to the routing table (or controls access to the incoming queues via RBAC) - logs the metadata about the messages it has seen
It doesn't inspect the messages in any way, store them or maintain any runtime state at all.