我使用 Spring Integration 构建以下流程:输入通道 -> 拆分器 -> 转换器 -> 服务激活器 -> 聚合器
Transformer 和 Service Activator 使用任务执行器链接并执行。在应用程序执行期间,没有任何问题。但是,当我尝试运行单元测试时,如果存在长时间运行的任务,则执行服务激活器的执行程序线程会神秘退出。为了演示这一点,我创建了一个具有以下配置的示例项目:
<task:executor id="executor" pool-size="20" keep-alive="120" queue-capacity="100"/>
<jms:message-driven-channel-adapter id="helloWorldJMSAdapater" destination="helloWorldJMSQueue"
channel="helloWorldChannel"/>
<int:channel id="helloWorldChannel"/>
<int:splitter id="splitter" input-channel="helloWorldChannel" output-channel="execChannel">
<bean id="stringSplitter" class="hello.Splitter"></bean>
</int:splitter>
<int:channel id="execChannel">
<int:dispatcher task-executor="executor"></int:dispatcher>
</int:channel>
<int:chain input-channel="execChannel" output-channel="aggregatorChannel">
<int:transformer>
<bean id="stringTransformer" class="hello.Transformer"></bean>
</int:transformer>
<int:service-activator id="helloWorldServiceActivator" ref="helloWorldAmqService" method="processMsg"/>
</int:chain>
<int:aggregator input-channel="aggregatorChannel" output-channel="errorChannel">
<bean class="hello.ResponseAggregator"/>
</int:aggregator>
这是 Splitter 类:
public class Splitter {
public List<String> splitMessage(Message message) {
String msg = message.getPayload().toString();
return Arrays.asList(msg.split(","));
}
}
这是 Transformer 类:
public class Transformer {
public String transform(Message message) {
String msg = message.getPayload().toString();
return msg+"t";
}
}
为了模拟长时间运行的任务,我Thread.sleep()在 processMsg 方法中添加了一个。
呼啦一阵风
相关分类