目前,我们的一个应用程序中存在类似于以下的代码:
@Component
public class ProcessRequestImpl {
private ExecutorService executorService;
public processRequest(...) {
// code to pre-process request
executorService.execute(new Runnable() {
public void run() {
ProcessRequestImpl.this.doWork(...);
}
}
}
private void doWork(...) {
// register in external file that request is being processed
// call external service to handle request
}
}
这样做的目的是为外部服务创建一个请求队列。外部服务可能需要一些时间来处理每个传入的请求。在处理完每个请求后,它将更新外部文件以注册特定请求已被处理。
ProcessRequestImpl
本身是无状态的,因为所有状态都在构造函数中设置,并且没有对该状态的外部访问。该process()
方法由应用程序中的另一个组件调用。
如果这要在 Spring Integration 应用程序中实现,最好推荐以下两种方法中的哪一种:
- 保持上面的代码不变。
- 提取
doWork()
,到一个单独的端点,配置该端点在通道上接收消息,并使用配置来代替执行器服务来实现多线程。
我们关注 Spring Integration 的一些原因如下:
- 从代码本身中去除工作流逻辑,使工作流和处理链在更高的层次上更加明显。
- 简化每个类,增强可读性和可测试性。
- 尽可能避免线程化代码,并在配置的更高抽象级别上定义它。
给定示例代码,是否可以使用 Spring Integration 实现这些目标。此外,实现这一目标的 DSL 示例是什么。
谢谢