Union multi-topics — fusionner les flux
Vous allez construire : un stage consommant trois topics de commandes régionales comme un seul flux fusionné — le fan-in sans glue code.
Prérequis
1 · Générez
pulse new global-orders --source webhook --stage rule-based:merge
2 · Déclarez l'union
stages:
- name: merge
engine: rule-based
inputTopics: [ orders-eu, orders-apac ] # en plus de l'entrée primaire
rules:
- { condition: "true", action: "emit:orders-merged" }
inputTopics abonne le stage à des topics supplémentaires en plus de son entrée primaire (global-orders.in). La règle avec condition: "true" laisse tout passer, en réémettant sur un topic fusionné unique via action: "emit:orders-merged".
3 · Déployez et alimentez les trois régions
pulse secret set PULSE_WEBHOOK_SECRET dev-secret # la source webhook générée l'exige
pulse deploy .
pulse events publish --topic global-orders.in --value '{"region":"us","amount":10}'
pulse events publish --topic orders-eu --value '{"region":"eu","amount":20}'
pulse events publish --topic orders-apac --value '{"region":"apac","amount":30}'
4 · Un seul flux fusionné
pulse events tail --topic orders-merged
Les trois événements arrivent sur l'unique topic fusionné — le stage a consommé l'union de ses entrées.
Ce qui vient de se passer
Le fan-in est déclaratif : inputTopics dans la config du stage, rien d'autre. Combiné au fan-out (plusieurs stages abonnés à un même topic) et au join stream-stream (qui s'abonne automatiquement à son rightTopic), vous avez toutes les primitives de composition de flux sans écrire un consommateur.
Dépannage
Les événements des topics supplémentaires n'arrivent pas
inputTopics est une liste dans la config du stage, au même niveau que rules/operators. Les entrées vides et le topic primaire lui-même sont ignorés — vérifiez l'orthographe avec pulse events tail sur le topic source.