Files
spring-integration/src/reference/asciidoc/bridge.adoc
Jay Bryant f3bf2a68d6 Full editing pass for the Reference Guide
I went through all the Asciidoc files to correct spelling, grammar,
punctuation, and usage. Wherever possible, I also made it more clear and more concise.
I also added links wherever they were reasonable.

Accommodating changes that came while I was editing

Various folks made changes (one of which I recommended) to the documents
while I spent a month editing.
I had to edit that new and changed content as well, so I need this second commit.

Accommodating Artem's requested changes for `aggregator.adoc`

Artem reviewed `aggregator.adoc` as a starting point, so that
he could get some questions answered.
I have made the changes he requested (and answered his questions on Github).
2018-07-03 14:11:02 -04:00

128 lines
4.3 KiB
Plaintext

[[bridge]]
=== Messaging Bridge
A messaging bridge is a relatively trivial endpoint that connects two message channels or channel adapters.
For example, you may want to connect a `PollableChannel` to a `SubscribableChannel` so that the subscribing endpoints do not have to worry about any polling configuration.
Instead, the messaging bridge provides the polling configuration.
By providing an intermediary poller between two channels, you can use a messaging bridge to throttle inbound messages.
The poller's trigger determines the rate at which messages arrive on the second channel, and the poller's `maxMessagesPerPoll` property enforces a limit on the throughput.
Another valid use for a messaging bridge is to connect two different systems.
In such a scenario, Spring Integration's role is limited to making the connection between these systems and managing a poller, if necessary.
It is probably more common to have at least a transformer between the two systems, to translate between their formats.
In that case, the channels can be provided as the 'input-channel' and 'output-channel' of a transformer endpoint.
If data format translation is not required, the messaging bridge may indeed be sufficient.
[[bridge-namespace]]
==== Configuring a Bridge with XML
You can use the `<bridge>` element is used to create a messaging bridge between two message channels or channel adapters.
To do so, provide the `input-channel` and `output-channel` attributes, as the following example shows:
====
[source,xml]
----
<int:bridge input-channel="input" output-channel="output"/>
----
====
As mentioned above, a common use case for the messaging bridge is to connect a `PollableChannel` to a `SubscribableChannel`.
When performing this role, the messaging bridge may also serve as a throttler:
====
[source,xml]
----
<int:bridge input-channel="pollable" output-channel="subscribable">
<int:poller max-messages-per-poll="10" fixed-rate="5000"/>
</int:bridge>
----
====
You can use a similar mechanism to connecting channel adapters.
The following example shows a simple "`echo`" between the `stdin` and `stdout` adapters from Spring Integration's `stream` namespace:
====
[source,xml]
----
<int-stream:stdin-channel-adapter id="stdin"/>
<int-stream:stdout-channel-adapter id="stdout"/>
<int:bridge id="echo" input-channel="stdin" output-channel="stdout"/>
----
====
Similar configurations work for other (potentially more useful) Channel Adapter bridges, such as file-to-JMS or mail-to-file.
Upcoming chapters cover the various channel adapters.
NOTE: If no 'output-channel' is defined on a bridge, the reply channel provided by the inbound message is used, if available.
If neither an output nor a reply channel is available, an exception is thrown.
[[bridge-annot]]
==== Configuring a Bridge with Java Configuration
The following example shows how to configure a bridge in Java by using the `@BridgeFrom` annotation:
====
[source, java]
----
@Bean
public PollableChannel polled() {
return new QueueChannel();
}
@Bean
@BridgeFrom(value = "polled", poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "10"))
public SubscribableChannel direct() {
return new DirectChannel();
}
----
====
The following example shows how to configure a bridge in Java by using the `@BridgeTo` annotation:
[source, java]
----
@Bean
@BridgeTo(value = "direct", poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "10"))
public PollableChannel polled() {
return new QueueChannel();
}
@Bean
public SubscribableChannel direct() {
return new DirectChannel();
}
----
Alternately, you can use a `BridgeHandler`, as the following example shows:
[source, java]
----
@Bean
@ServiceActivator(inputChannel = "polled",
poller = @Poller(fixedRate = "5000", maxMessagesPerPoll = "10"))
public BridgeHandler bridge() {
BridgeHandler bridge = new BridgeHandler();
bridge.setOutputChannelName("direct");
return bridge;
}
----
[[bridge-dsl]]
==== Configuring a Bridge with the Java DSL
You can use the Java Domain Specific Language (DSL) to configure a bridge, as the following example shows:
[source, java]
----
@Bean
public IntegrationFlow bridgeFlow() {
return IntegrationFlows.from("polled")
.bridge(e -> e.poller(Pollers.fixedDelay(5000).maxMessagesPerPoll(10)))
.channel("direct")
.get();
}
----