Spring 通过注释集成控制总线配置
Spring Integration Control Bus configuration via annotations
一个简单的问题:
有什么方法可以通过注释配置 Spring Integration Control Bus(没有任何 xml)
<control-bus input-channel="operationChannel"/>
?
Spring Integration Java DSL 提供了有关此事的资料:
@Bean
public IntegrationFlow controlBusFlow() {
return IntegrationFlows.from("operationChannel").controlBus().get();
}
@Bean
@ServiceActivator(inputChannel = "controlBusChannel")
public ExpressionControlBusFactoryBean controlBus() throws Exception {
ExpressionControlBusFactoryBean controlBus = new ExpressionControlBusFactoryBean();
return controlBus;
}
请注意,注释上的任何 outputChannel
都将被忽略;它是在总线本身上定义的。
通常情况下,控制总线的输出通道会被省略,而正常的 request/reply 操作的结果,例如 @someBean.isRunning()
(如果 someBean 实现 Lifecycle
例如)回到replyChannel
header(例如 MessagingTemplate.sendAndReceive()
操作或消息传递网关)。
如果您需要将控制总线操作结果发送到其他地方,请向工厂 bean 添加一个输出通道。
任何 MessageHandler
@Bean
(或创建一个的工厂 bean)现在都可以使用 @ServiceActivator
进行注释。参见 the documentation。
一个简单的问题: 有什么方法可以通过注释配置 Spring Integration Control Bus(没有任何 xml)
<control-bus input-channel="operationChannel"/>
?
Spring Integration Java DSL 提供了有关此事的资料:
@Bean
public IntegrationFlow controlBusFlow() {
return IntegrationFlows.from("operationChannel").controlBus().get();
}
@Bean
@ServiceActivator(inputChannel = "controlBusChannel")
public ExpressionControlBusFactoryBean controlBus() throws Exception {
ExpressionControlBusFactoryBean controlBus = new ExpressionControlBusFactoryBean();
return controlBus;
}
请注意,注释上的任何 outputChannel
都将被忽略;它是在总线本身上定义的。
通常情况下,控制总线的输出通道会被省略,而正常的 request/reply 操作的结果,例如 @someBean.isRunning()
(如果 someBean 实现 Lifecycle
例如)回到replyChannel
header(例如 MessagingTemplate.sendAndReceive()
操作或消息传递网关)。
如果您需要将控制总线操作结果发送到其他地方,请向工厂 bean 添加一个输出通道。
任何 MessageHandler
@Bean
(或创建一个的工厂 bean)现在都可以使用 @ServiceActivator
进行注释。参见 the documentation。