GH-3763: Add handleReactive() for Java DSL (#8605)
* GH-3763: Add `handleReactive()` for Java DSL Fixes https://github.com/spring-projects/spring-integration/issues/3763 Add a convenient terminal operator to `BaseIntegrationFlowDefinition` based on a `ReactiveMessageHandler`. Also add an overload like `handleReactive(ReactiveMessageHandlerSpec)` to let end-user to choose a protocol-specific channel adapter * * Fix `Namespace Factory` wording in the `BaseIntegrationFlowDefinition` Javadocs * Fix language in Docs Co-authored-by: Gary Russell <grussell@vmware.com> --------- Co-authored-by: Gary Russell <grussell@vmware.com>
This commit is contained in:
@@ -110,10 +110,10 @@ With Java DSL a configuration for this channel adapter is like this:
|
||||
====
|
||||
[source, java]
|
||||
----
|
||||
.handle(R2dbc.outboundChannelAdapter(r2dbcEntityTemplate)
|
||||
.handleReactive(R2dbc.outboundChannelAdapter(r2dbcEntityTemplate)
|
||||
.queryType(R2dbcMessageHandler.Type.UPDATE)
|
||||
.tableNameExpression("payload.class.simpleName")
|
||||
.criteria((message) -> Criteria.where("id").is(message.getHeaders().get("personId")))
|
||||
.values("{age:36}"))
|
||||
----
|
||||
====
|
||||
====
|
||||
|
||||
@@ -154,6 +154,29 @@ However, when a `ReactiveStreamsConsumer` is involved in the flow (e.g. when cha
|
||||
One of the out-of-the-box `ReactiveMessageHandler` implementation is a `ReactiveMongoDbStoringMessageHandler` for Outbound Channel Adapter.
|
||||
See <<./mongodb.adoc#mongodb-reactive-channel-adapters,MongoDB Reactive Channel Adapters>> for more information.
|
||||
|
||||
Starting with version 6.1, the `IntegrationFlowDefinition` exposes a convenient `handleReactive(ReactiveMessageHandler)` terminal operator.
|
||||
Any `ReactiveMessageHandler` implementation (even just a plain lambda using the `Mono` API) can be used for this operator.
|
||||
The framework subscribes to the returned `Mono<Void>` automatically.
|
||||
Here is a simple sample of possible configuration for this operator:
|
||||
|
||||
====
|
||||
[source, java]
|
||||
----
|
||||
@Bean
|
||||
public IntegrationFlow wireTapFlow1() {
|
||||
return IntegrationFlow.from("tappedChannel1")
|
||||
.wireTap("tapChannel", wt -> wt.selector(m -> m.getPayload().equals("foo")))
|
||||
.handleReactive((message) -> Mono.just(message).log().then());
|
||||
}
|
||||
----
|
||||
====
|
||||
|
||||
An overloaded version of this operator accepts a `Consumer<GenericEndpointSpec<ReactiveMessageHandlerAdapter>>` to customize a consumer endpoint around the provided `ReactiveMessageHandler`.
|
||||
|
||||
In addition, a `ReactiveMessageHandlerSpec`-based variants are also provided.
|
||||
In most cases they are used for protocol-specific channel adapter implementations.
|
||||
See the next section following links to the target technologies with respective reactive channel adapters.
|
||||
|
||||
[[reactive-channel-adapters]]
|
||||
=== Reactive Channel Adapters
|
||||
|
||||
|
||||
@@ -29,6 +29,11 @@ See <<./zip.adoc#zip,Zip Support>> for more information.
|
||||
The `ContextHolderRequestHandlerAdvice` allows to store a value from a request message into some context around `MessageHandler` execution.
|
||||
See <<./handler-advice.adoc#context-holder-advice, Context Holder Advice>> for more information.
|
||||
|
||||
[[x6.1-handle-reactive]]
|
||||
==== The `handleReactive()` operator for Java DSL
|
||||
The `IntegrationFlow` can now end with a convenient `handleReactive(ReactiveMessageHandler)` operator.
|
||||
See <<./reactive-streams.adoc#reactive-message-handler, `ReactiveMessageHandler`>> for more information.
|
||||
|
||||
[[x6.1-general]]
|
||||
=== General Changes
|
||||
|
||||
|
||||
Reference in New Issue
Block a user