我正在Talend Open Studio为ESB设计一份工作。我的目标是创建一个用于处理带有数据的文件的作业。此作业用于Web服务,该服务部署在服务器上。此Web服务是SOAP类型,它包含以下组件:
一切正常,直到处理具有大量数据的文件。这需要一些时间,最后它会抛出一个运行时异常,并带有消息:“Talend job没有提供响应”
顺便说一下。其他一切工作正常 - 整个文件的处理。但最终会抛出异常。
我可以看到用Java生成的代码(遗憾的是,无法编辑它)。我找到了这段代码:
/**
* message exchange controller
*/
public class QueuedMessageHandlerImpl<IN, OUT> implements
ESBProviderCallback {
private final int MAX_QUEUE_SIZE = 1000;
private final int WAIT_TIMEOUT_SECONDS = 120;
private final java.util.concurrent.BlockingQueue<QueuedExchangeContextImpl<IN, OUT>> queue = new java.util.concurrent.LinkedBlockingQueue<QueuedExchangeContextImpl<IN, OUT>>(
MAX_QUEUE_SIZE);
显然,我只有120秒的时间来处理。我该怎么改变它?有没有解决方法?
似乎没有完成,任何配置都无法完成。我使用Talend ESB 6.5.1版。迁移到7.0.1版本后,此tESBProviderRequest在“高级”部分中获得了选项:https://help.talend.com/reader/6pO1HSkFat02LpDF_xCmsg/XXo1~pvJC7rmkmJ0J_E0fg
所以我为时间设置了新的价值并且它起作用了。
您可能希望重新考虑您的设计 - 使用同步(阻塞)Web服务来处理文件并让客户端等到处理完成时,如您所见,处理时间增加时会出现问题。
您是否考虑过实现异步设计?这将是客户端向Web服务发送请求的地方,该服务的唯一任务是接受请求并将这些请求放入消息传递队列,从而释放客户端以执行其他操作。至少,您将请求与处理分离,并避免在文件很大时发生超时问题。请注意,某个级别的HTTP也内置了会话超时,因此最好通过使用不同的设计来完全避免该问题。
最后一点,我强烈建议您在使用Talend ESB时尝试远离作业使用 - 您应该检查Routes,它们用于生成Apache Camel代码。它们比用例更强大,可以与ActiveMQ(与Studio捆绑在一起)配合使用。
Talend ESB Studio附带了一些可以导入和检出的演示,我强烈建议您从那里开始。