@bimetal/broker
v0.17.0
Published
Generic pluggable message broker abstraction. Domain-agnostic pub/sub with capability model. In-process default, external adapters (Kafka, RabbitMQ, …) implement the same Broker interface. Zero external npm dependencies.
Downloads
1,729
Maintainers
Readme
@bimetal/broker
Generic pluggable message broker abstraction. Domain-agnostic pub/sub mit Capability-Modell. In-Process-Default; externe Adapter (Kafka, RabbitMQ, NATS, …) implementieren das gleiche Interface.
Zero external dependencies. Zero @bimetal/* dependencies. Standort im Stack neben @bimetal/event-sourcing: beide sind Architektur-Primitive, keine domain-spezifischen Packages.
Installation
npm install @bimetal/brokerWhat's Inside
Types
Broker<TMessage = unknown>— generic pub/sub-Interface (publish,subscribe, optionalsubscribePattern, optionalclose)BrokerCapabilities—{ patterns, replay, ordering }. Einzige Quelle der Wahrheit für Adapter-Fähigkeiten.BrokerErrorHandler,BrokerErrorContext— Fehler-Isolation: ein werfender Handler darf andere nicht blockieren.MessageHandler<TMessage>,Topic,TopicPattern,Unsubscribe
In-Process-Default
createInProcessBroker(options?)— Default-Adapter, RabbitMQ-Style Wildcards, async viaqueueMicrotask,flush()als Test-Helfer.InProcessBroker<TMessage>—Broker<TMessage> & { flush(): Promise<void> }.flush()ist bewusst nicht im Hauptinterface.
Topic-/Pattern-Utilities
assertValidTopic(topic),assertValidPattern(pattern)— werfen bei syntaktischen Fehlern.topicMatchesPattern(topic, pattern)— RabbitMQ-Topic-Match (*= ein Segment,#= mehrere).
Designprinzipien
- Generic over
TMessage: kein DomainEvent-Lock-in. Konsumenten typisieren z. B.Broker<DomainEvent>und liefern Helper wieeventToTopicseparat. - Async-Vertrag:
publish()resolved, sobald Zustellung geplant ist — nicht „handled". In-Process viaqueueMicrotask; externe Adapter heißt „ack vom Broker erhalten". - Capabilities zuerst: Adapter-Unterschiede werden explizit über
capabilitieskommuniziert, nicht durch Anwesenheit/Abwesenheit von Methoden. - Wildcards getrennt:
subscribe(exakt) undsubscribePattern(mit*/#) sind getrennt. Adapter, die keine Wildcards können (Kafka), setzencapabilities.patterns = falseund werfen oder weglassen. - Fehler-Isolation: Subscriber-Exceptions stoppen die Zustellung an Geschwister nicht.
onErrormacht Fehler sichtbar — nicht schluckend, nicht blockierend. - Keine EventStore-Kopplung: Bridge
EventStore → Brokerist bewusst außerhalb dieses Packages, immer opt-in, immer post-append.
Status
Teil von Phase 11 — Broker-Abstraktion (BIMETAL-Roadmap). v0.13.1 ist die erste Version, weitere Adapter (@bimetal/broker-kafka, @bimetal/broker-rabbitmq) folgen.
