Spring integration 我们可以用一条控制总线消息启动/停止所有通道适配器吗?

Spring integration 我们可以用一条控制总线消息启动/停止所有通道适配器吗?,spring-integration,Spring Integration,我知道我们可以通过发送如下控制总线消息来启动/停止通道适配器:@adapterid.start()。 但是我们能用一条消息为所有适配器实现这一点吗? 比如:@allAdapters.start()? 在我的系统中,我有大约20个入站适配器,逐个处理它们不是一个灵活的解决方案 谢谢 ference我记得我使用内嵌Groovy脚本时: <service-activator> <groovy:script> ['foo1', 'foo2'].each

我知道我们可以通过发送如下控制总线消息来启动/停止通道适配器:@adapterid.start()。 但是我们能用一条消息为所有适配器实现这一点吗? 比如:@allAdapters.start()? 在我的系统中,我有大约20个入站适配器,逐个处理它们不是一个灵活的解决方案

谢谢


ference

我记得我使用内嵌Groovy脚本时:

<service-activator>
   <groovy:script>
          ['foo1', 'foo2'].each {
                this."$it".start()
          }
   </groovy:script>
</service-activator>

['foo1','foo2'],每种{
这个“$it.start()
}

或者,您可以使用一些定制Java组件来实现这一点,该组件注入了所有所需的组件,其
start()
只需对它们进行迭代,并通过容器bean的简单控制总线命令调用它们的
start()

Ok。目前我正在这样做,但这似乎是黑客行为。所以,如果我理解正确,就没有处理这个问题的内置解决方案。你必须一个接一个地发送消息。对。它实际上是你应用程序的一个特定部分。不要忘记Spring集成的一个目的是提供
松散耦合的
原则实现。作为一个框架功能,一次启动/停止所有适配器听起来真的不太好。可能有一个InboundChannelRegistry,所有通道适配器都应该在启动时进行动态注册。然后,您可以向注册表发送一条消息,以停止/启动所有已注册的适配器。这不会损害“松散耦合”原则。我想。在
集成MBeanExporter
-
stopActiveChannel()
stopMessageSources()
stopInboundMessageProducers()
上有几个
@managedOperations
。这些由over-arch
stopActiveComponents()
操作调用。最后两个将执行您想要停止的操作,但无法启动它们,因为这实际上是为了在关闭应用程序上下文之前有序地关闭它们。由于
IMBE
已经有了您所说的“注册表”,我们可以相对轻松地添加start支持。请随便开一家店。