最近在一个由FTP Receive Port, Customized Pipeline,Map组成的小项目中,出现了一个奇怪的问题:当把多个测试文件放到Receive Location后,其中的一个文件被Pick up.剩下的文件就没有反应了。姑且把这个问题定义为FTP Adapter Hang吧。
经过一点时间的troubleshoot后,锁定问题的元凶是:Message在Customized Pipeline中抛出未被捕获的异常。在BTS Admin中查询该Message,发现它的状态是Queued(Retry later),对应的Pipeline Service是没有问题的(没有被截获)。修改Pipeline,把Throw ApplicationException改为只是写日志,Excute方法返回null后,所以的测试文件都可以被吃掉了。
同样的代码,用FILE Adapter代替FTP Adapter来做测试,发现没有上述问题。
结论:视乎在Pipeline中,用return null比直接抛异常要合适些。