是否可以在运行时启动/停止服务激活器?

时间:2013-09-25 13:30:29

标签: spring-integration

我有一个通过消息队列与另一个应用程序连接的Web应用程序。因此,我的Web应用程序有一个service-actibator绑定到入站消息驱动的通道适配器;目前它始终在侦听队列中的消息。

然而,有时可能会在没有弹回应用程序本身的情况下转而倾听。例如,如果队列获得积压的消息,并且由于某种原因,正在侦听这些消息的Web应用程序开始出现性能问题,并且我们希望将应用程序与队列隔离,以帮助确定这是否是性能的来源问题与否。

最重要的是,我们正在努力寻找方法来帮助我们的支持人员在需要诊断潜在的系统间问题时......无需为了配置更改而反弹服务器。

然后,如果确定应该重新打开外部系统的接口,那么我们希望能够重新启动服务激活器。

这样的事情可能吗?或者是否有一种方法,我没想到会允许这种类型的运行时启动/停止功能?

1 个答案:

答案 0 :(得分:0)

是的,有可能。 Spring Integration中的所有端点都实现了org.springframework.context.SmartLifecycle。 从另一方面来说,SI有一个用于此目的的组件 - Control Bus 所以,非常简单:

<channel id="controlBusChannel"/>    
<control-bus input-channel="controlBusChannel"/>

<service-activator input-channel="stopMyServiceActivatorChannel"
    output-channel="controlBusChannel" expression="'@myServiceActivator.stop()'"/>

<service-activator id="myServiceActivator" input-channel="myInputChannel"
    output-channel="myOutupChannel"/>