Use PostgreSQL's NOTIFY/LISTEN for event pub/sub #100
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Using PostgreSQL for pub/sub removes the requirement for EventStore to form a cluster of nodes.
It can be used on a single node or multiple nodes, but they don't need to be directly connected. The database will be used to distribute events instead. This simplifies running EventStore on a cluster and removes the dependency upon Swarm.
A single listener process subscribes to event notifications using PostgreSQL's
LISTEN
command. Whenever events are appended to storage aNOTIFY
command is executed by a table trigger. The notification payload contains the first and last event number of the appended events (e.g.1,2
). These events are then read from storage and published to interested subscribers. Elixir'sGenStage
is used to read and forward events to subscriptions.PG2 groups are now used for event pub/sub when run in distributed mode.