Skip to main content

Spring Integration ⇄ Pulse

Intermediate ⏱ 10 min spring · java · outboundGateway · ✅ ran E2E in repo

Spring Integration owns the message flow; Pulse is the stream step reached through the first-class Http.outboundGateway — no glue. Repo example: examples/spring-integration-pulse-bridge/ran end-to-end as a real Spring Boot 3.3 / SI 6 app (JDK 17+, validated on JDK 21).

IntegrationFlow.from("orders.input")
.enrichHeaders(orderId, Authorization)
.transform(toJson)
.handle(Http.outboundGateway(".../api/pulse/x/order-scoring/in").POST) // send
.delay(1500ms)
.handle(Http.outboundGateway(".../api/pulse/events/order-scoring.score.out").GET) // read
.handle((payload, headers) -> decide(...)); // escalate | auto-approve

Run it

pulse server start --dev
mkdir app && cp pulse.yaml app/ && (cd app && pulse deploy .) # stands up order-scoring
PULSE_URL=http://localhost:9090 mvn -q spring-boot:run

Validated output

amount= 2500 -> decision=escalate
amount= 300 -> decision=auto-approve

The flow keeps Spring's channel/transformer/gateway model; the stateful real-time intelligence lives in the Pulse stage, upgradeable without touching the flow.

Next