目前,我们的一个应用程序中存在类似于以下内容的代码:
@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将成为实现这一目标的一个例子。
由于
答案 0 :(得分:0)
像
这样的东西@Bean
public IntegrationFlow flow() {
return IntegrationFlows.from(SomeGatewayInterface.class)
.handle("someBean", "preProcess")
.channel(MessageChannels.executor(someTaskExecutorBean())
.handle("someBean", "doWork")
.get();
传递给gateway方法的参数成为preprocess
方法的有效负载,它将返回一些成为消息有效负载的对象,该对象成为传递给doWork
的参数。