Aller au contenu principal

Union multi-topics — fusionner les flux

Intermédiaire ⏱ 10 min streaming · union · fan-in

Vous allez construire : un stage consommant trois topics de commandes régionales comme un seul flux fusionné — le fan-in sans glue code.

orders-us + orders-eu + orders-apac → stage union → orders-merged

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.

Ensuite