对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
对于最新的稳定版本,请使用 Spring Integration 6.3.4! |
消息桥是连接两个消息通道或通道适配器的相对简单的端点。
例如,您可能希望将 a 连接到 a,以便订阅终端节点不必担心任何轮询配置。
相反,消息桥提供轮询配置。PollableChannel
SubscribableChannel
通过在两个通道之间提供中间轮询器,您可以使用消息传递桥来限制入站消息。
Poller 的触发器确定消息到达第二个通道的速率,而 Poller 的属性对吞吐量实施限制。maxMessagesPerPoll
消息桥的另一个有效用途是连接两个不同的系统。 在这种情况下, Spring 集成的作用仅限于在这些系统之间建立连接并在必要时管理 Poller。 在两个系统之间至少有一个转换器,以便在它们的格式之间进行转换,这可能更常见。 在这种情况下,通道可以作为转换器端点的 'input-channel' 和 'output-channel' 提供。 如果不需要数据格式转换,则消息桥可能确实足够了。
使用 XML 配置 Bridge
您可以使用 element is 在两个消息通道或通道适配器之间创建消息桥。
为此,请提供 and 属性,如下例所示:<bridge>
input-channel
output-channel
<int:bridge input-channel="input" output-channel="output"/>
如上所述,消息桥的一个常见用例是将 连接到 .
在执行此角色时,消息传送桥还可以用作限制器:PollableChannel
SubscribableChannel
<int:bridge input-channel="pollable" output-channel="subscribable">
<int:poller max-messages-per-poll="10" fixed-rate="5000"/>
</int:bridge>
您可以使用类似的机制来连接通道适配器。
下面的示例显示了 Spring 集成命名空间中 和 adapters 之间的简单“echo”:stdin
stdout
stream
<int-stream:stdin-channel-adapter id="stdin"/>
<int-stream:stdout-channel-adapter id="stdout"/>
<int:bridge id="echo" input-channel="stdin" output-channel="stdout"/>
类似的配置适用于其他(可能更有用的)Channel Adapter 桥接,例如文件到 JMS 或邮件到文件。 接下来的章节将介绍各种通道适配器。
如果未在桥接上定义 'output-channel',则使用入站消息提供的回复通道(如果可用)。 如果 output 和 reply channel 都不可用,则会引发异常。 |
如果未在桥接上定义 'output-channel',则使用入站消息提供的回复通道(如果可用)。 如果 output 和 reply channel 都不可用,则会引发异常。 |
使用 Java 配置配置 Bridge
以下示例演示如何使用注释在 Java 中配置网桥:@BridgeFrom
@Bean
public PollableChannel polled() {
return new QueueChannel();
}
@Bean
@BridgeFrom(value = "polled", poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "10"))
public SubscribableChannel direct() {
return new DirectChannel();
}
以下示例演示如何使用注释在 Java 中配置网桥:@BridgeTo
@Bean
@BridgeTo(value = "direct", poller = @Poller(fixedDelay = "5000", maxMessagesPerPoll = "10"))
public PollableChannel polled() {
return new QueueChannel();
}
@Bean
public SubscribableChannel direct() {
return new DirectChannel();
}
或者,您可以使用 ,如下例所示:BridgeHandler
@Bean
@ServiceActivator(inputChannel = "polled",
poller = @Poller(fixedRate = "5000", maxMessagesPerPoll = "10"))
public BridgeHandler bridge() {
BridgeHandler bridge = new BridgeHandler();
bridge.setOutputChannelName("direct");
return bridge;
}
使用 Java DSL 配置 Bridge
您可以使用 Java 域特定语言 (DSL) 来配置网桥,如下例所示:
@Bean
public IntegrationFlow bridgeFlow() {
return IntegrationFlow.from("polled")
.bridge(e -> e.poller(Pollers.fixedDelay(5000).maxMessagesPerPoll(10)))
.channel("direct")
.get();
}