如何定义一个简单的桥接器,它只是通过java注释从一个directChannel桥接到另一个;
在xml中可以这样做(取自http://docs.spring.io/spring-integration/reference/html/messaging-channels-section.html)
<int:bridge input-channel="input" output-channel="output"/>
带注释的我希望这个定义看起来像这个
@Bean
@BridgeFrom("inboundChannel")
@BridgeTo("outboundChannel")
public MessageChannel bridge() {
return new DirectChannel();
}
但这给了我错误
IllegalArgumentException: '@BridgeFrom' is eligible only for 'MessageChannel' '@Bean' methods
有关如何将上述xml-definition转换为java-config-definition的任何建议?
答案 0 :(得分:3)
应该是
@Bean
@BridgeTo("output")
public MessageChannel input() {
return new DirectChannel();
}
或
@Bean
@BridgeFrom("input")
public MessageChannel output() {
return new DirectChannel();
}
你的解决方案没问题,但效率稍差。
修改强>
如果你想要桥接两个通道,你无法控制的配置,或者你想以不同的方式在“库”配置之间架起桥梁,这是你所拥有的更有效的版本... < / p>
@Bean
@ServiceActivator(inputChannel="inboundChannel")
public MessageHandler bridge() {
BridgeHandler handler = new BridgeHandler();
handler.setOutputChannelName("outboundChannel");
return handler;
}
请注意,输出通道位于处理程序上,而不是服务激活器注释。有关此配置样式,请参阅here。
答案 1 :(得分:0)
我找到了一个使用@ServiceActivator的解决方法,但我不确定它是否100%等效。
@ServiceActivator(inputChannel = "inboundChannel", outputChannel = "outboundChannel")
public Message<?> bridge(Message<?> m) {
return m;
}