为什么 ExecutorChannel.onInit() 会重置调度程序?
Why is ExecutorChannel.onInit() resetting the dispatcher?
我有一个简单的工作 Spring 集成应用程序,它通过处理程序链将消息从入站 RabbitMQ 网关移动到 MongoDB 数据库中。当我从直接频道更改为执行程序频道时,我开始收到订户错误。在调试器中观察,我发现在设置 ExecutorChannel bean 之后,onInit() 方法被触发并将所有内容重置为默认值。我不明白为什么代码会被构造成这样做?我查看了 DirectChannel.onInit() 并且它只会在之前未设置值的情况下修改内容。有任何想法吗?我正在使用 Spring 集成 4.1.2.
// from
@Bean
DirectChannel uploadChannel( MessageHandlerChain uploadMessageHandlerChain ) {
def bean = new DirectChannel()
bean.subscribe( uploadMessageHandlerChain )
bean
}
// to
@Bean
ExecutorChannel uploadChannel( MessageHandlerChain uploadMessageHandlerChain ) {
def bean = new ExecutorChannel( Executors.newCachedThreadPool() )
bean.subscribe( uploadMessageHandlerChain )
bean
}
org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
当您使用 XML 应用程序上下文创建通道时,您首先定义通道,然后在 EIP 模式中使用它:
<int:channel id="directChannel"/>
<int:service-activator input-channel="directChannel"/>
在我看来,这可以更好地分离关注点。相同的模式必须与 java 配置一起使用,首先声明您的频道然后声明 MessageHandlerChain
并订阅频道
@Bean
ExecutorChannel uploadChannel() {
def bean = new ExecutorChannel( Executors.newCachedThreadPool() )
bean
}
@Bean
MessageHandlerChain uploadMessageHandlerChain(){
def uploadMessageHandlerChain = new MessageHandlerChain()
uploadChannel().subscribe(uploadMessageHandlerChain)
uploadMessageHandlerChain
}
我有一个简单的工作 Spring 集成应用程序,它通过处理程序链将消息从入站 RabbitMQ 网关移动到 MongoDB 数据库中。当我从直接频道更改为执行程序频道时,我开始收到订户错误。在调试器中观察,我发现在设置 ExecutorChannel bean 之后,onInit() 方法被触发并将所有内容重置为默认值。我不明白为什么代码会被构造成这样做?我查看了 DirectChannel.onInit() 并且它只会在之前未设置值的情况下修改内容。有任何想法吗?我正在使用 Spring 集成 4.1.2.
// from
@Bean
DirectChannel uploadChannel( MessageHandlerChain uploadMessageHandlerChain ) {
def bean = new DirectChannel()
bean.subscribe( uploadMessageHandlerChain )
bean
}
// to
@Bean
ExecutorChannel uploadChannel( MessageHandlerChain uploadMessageHandlerChain ) {
def bean = new ExecutorChannel( Executors.newCachedThreadPool() )
bean.subscribe( uploadMessageHandlerChain )
bean
}
org.springframework.integration.MessageDispatchingException: Dispatcher has no subscribers
当您使用 XML 应用程序上下文创建通道时,您首先定义通道,然后在 EIP 模式中使用它:
<int:channel id="directChannel"/>
<int:service-activator input-channel="directChannel"/>
在我看来,这可以更好地分离关注点。相同的模式必须与 java 配置一起使用,首先声明您的频道然后声明 MessageHandlerChain
并订阅频道
@Bean
ExecutorChannel uploadChannel() {
def bean = new ExecutorChannel( Executors.newCachedThreadPool() )
bean
}
@Bean
MessageHandlerChain uploadMessageHandlerChain(){
def uploadMessageHandlerChain = new MessageHandlerChain()
uploadChannel().subscribe(uploadMessageHandlerChain)
uploadMessageHandlerChain
}