We have a SpringIntegration workflow with restful HTTP inbound calls and outbound calls. The workflow is mostly expressed with XML declarations of channels, chains, a splitter and an aggregator.
In the Servlet
realm, we use the http:inbound-gateway
and http:outbound-gateway
components for input/output to the internal workflow. This seems to work well using SpringBoot autoconfiguration
for Tomcat/Jetty/Undertow.
We've been trying the Reactive
realm, using webflux:inbound-gateway
and webflux:outbound-gateway
components on the same internal workflow. This seems to work OK for tomcat
and jetty
servers but getting no responses from netty
and some errors from undertow
. I have yet to discover why we are getting errors from the last two configurations.
What I'm wondering is if the same internal workflow can be hooked up to reactive
or servlet
components without requiring changes. We do use a splitter/aggregator, and my reading of the SpringIntegration documentation sections on WebFlux hasn't quite cleared up for me if these constructs can be used in both realms. ( https://docs.spring.io/spring-integration/reference/html/reactive-streams.html#splitter-and-aggregator )
Any pointers on this subject?
The webflux:inbound-gateway
is a server side of HTTP protocol. Has to be used in the Reactive Streams HTTP server environment. Not sure about Undertow and Jetty, but Tomcat works in the simulating mode. I usually use an io.projectreactor.netty:reactor-netty-http
.
The webflux:outbound-gateway
is a client side of HTTP protocol. It is fully based on the WebClient
and doesn't matter in what environment it is used.
same applies for a splitter and aggregator components: they don't require any server implementation and they don't expose any external ports to worry about some specifics. Can simply be used in the reactive stream definition and in regular flows.