feat: implement fan-out — multiple handlers per Dispatcher projection#13
Merged
Conversation
Dispatcher type changes from map[interface{}]HandlerFunc to
map[interface{}][]HandlerFunc. A new Register(projection, ...HandlerFunc)
method accumulates handlers for the same key. Publish() and
Transaction.Commit() iterate over all handlers per event projection;
each handler gets its own middleware chain, before/after/error hooks,
and processedCount increment, so subscribers are fully independent —
an error in one does not prevent siblings from running.
Examples updated to use Register. Tests updated with hs() helper and
three new fan-out tests covering sync, error-independence, and async modes.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reflects the current API surface: Dispatcher is now map[interface{}][]HandlerFunc
with Register(), fan-out section added, middleware and lifecycle hook examples
included, Transaction example fixed, __ctx magic key removed, internal struct
fields removed from API reference, and all code samples verified against the
live codebase.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Dispatcher type changes from map[interface{}]HandlerFunc to map[interface{}][]HandlerFunc. A new Register(projection, ...HandlerFunc) method accumulates handlers for the same key. Publish() and Transaction.Commit() iterate over all handlers per event projection; each handler gets its own middleware chain, before/after/error hooks, and processedCount increment, so subscribers are fully independent — an error in one does not prevent siblings from running.
Examples updated to use Register. Tests updated with hs() helper and three new fan-out tests covering sync, error-independence, and async modes.