Apache Camel:处理GenericFileOperationFailedException中包含的unix文件权限错误

时间:2013-04-25 23:27:28

标签: apache-camel

这是我一直在努力解决的问题...我正在使用Camel(v2.10.2)设置许多文件路由来跨文件系统,服务器以及组织内外移动数据(B2B)。各自的目录中有数据和信号文件,其中一些路由是短暂的,而其他路由作为不同VM /服务器上的服务运行。这些进程(路由)在不同的unix'functional'id下运行,但如果可能的话,尝试使它们属于同一个unix组......

当然,在unix上总是存在文件/目录权限问题的可能性......这就是我正面临/试图解决的问题。

我使用DefaultErrorHandler并通过RoutePolicy内的onExchangeDone(...)检查Exchange.isFailed(),通过自定义.error记录成功或失败。成功时将信号文件移动到目标,或者在失败时移动到consumer.bridgeErrorHandler=true目录,并将警报写入系统范围的警报日志(由Tivoli检查)

文件路由配置为通过File

传播在拾取文件等时发生的错误

基本上,如果我有任何与unix权限相关的错误,那么我想停止(并且可能删除)受影响的路由,清楚地表明这已发生以及为什么 - 权限问题不容易以编程方式解决,因此停止并发出警报是唯一的选择。

因此,我将说明导致问题的测试用例......

App_A在 ./ data / 中创建一些数据文件。然后App_A在 ./ signal / 中创建相同数量的信号文件,但由于某些“数据”相关的错误,它还会创建一个信号文件 ./ signal / acc_xyz.csv 没有相应的数据文件。

路由开始处理 ./ signal / acc_xyz.csv ,并且'验证过程'发现 ./ data / acc_xyz.csv 不存在并抛出异常表示这一点,因此停止进一步处理交换。

moveFailed=.error组件配置了GenericFileOperationFailedException以将信号文件移动到 ./ signal / .error / ,但此目录已被锁定(不用担心为什么这是执行Java进程的功能用户ID,内部Camel处理会抛出2013-04-25 15:06:26,001 [Camel (camel-1) thread #0 - file:///FTROOT/fileTransfer/outbound/signal] ERROR (MarkerIgnoringBase.java:161) - Failed delivery for (MessageId: ID-rwld601-rw-discoverfinancial-com-60264-1366902384246-0-1 on ExchangeId: ID-rwld601-rw-discoverfinancial-com-60264-1366902384246-0-2). Exhausted after delivery attempt: 1 caught: java.lang.IllegalStateException: missingFile: route [App_A.outboundReceipt] has missing file at /FTROOT/fileTransfer/outbound/data/stuff.log java.lang.IllegalStateException: missingFile: route [App_A.outboundReceipt] has missing file at /FTROOT/fileTransfer/outbound/data/stuff.log at com.myco.mft.process.BaseFileRouteBuilder.checkFile(BaseFileRouteBuilder.java:934) ,表明原因是潜在的“权限被拒绝”问题。

哦,亲爱的,然后再次处理相同的信号文件,并再次......和

我试图将这个“二次错误”传播到我的代码,但是失败了,因此我无法阻止这条路线。

如何才能将此内容和其他内部Camel错误传播到我的代码/异常处理程序/什么,而不仅仅是记录和吞下它?

提前致谢

来自log4j的更多细节...请注意时间序列

Camel DefaultErrorHandler:

2013-04-25 15:06:26,011|Camel (camel-1) thread #0 - file:///FTROOT/fileTransfer/outbound/signal|exchange|App_A.outboundReceipt|signalFile=/FTROOT/fileTransfer/outbound/signal/stuff.log|there has been a routing failure|missingFile: route [App_A.outboundReceipt] has missing file at /FTROOT/fileTransfer/outbound/data/stuff.log

我的警报记录器通过RoutePolicy.onExchangeDone(...) - 在此交换已完成但失败:

2013-04-25 15:06:26,027 [Camel (camel-1) thread #0 - file:///FTROOT/fileTransfer/outbound/signal] WARN  (GenericFileOnCompletion.java:149) - Rollback file strategy: org.apache.camel.component.file.strategy.GenericFileDeleteProcessStrategy@104e28b for file: GenericFile[/FTROOT/fileTransfer/outbound/signal/stuff.log]
2013-04-25 15:06:28,038 [Camel (camel-1) thread #0 - file:///FTROOT/fileTransfer/outbound/signal] WARN  (MarkerIgnoringBase.java:136) - Caused by: [org.apache.camel.component.file.GenericFileOperationFailedException - Error renaming file from /FTROOT/fileTransfer/outbound/signal/stuff.log to /FTROOT/fileTransfer/outbound/signal/.error/stuff.log]
org.apache.camel.component.file.GenericFileOperationFailedException: Error renaming file from /FTROOT/fileTransfer/outbound/signal/stuff.log to /FTROOT/fileTransfer/outbound/signal/.error/stuff.log
        at org.apache.camel.component.file.FileOperations.renameFile(FileOperations.java:72)
...
Caused by: java.io.FileNotFoundException: /FTROOT/fileTransfer/outbound/signal/stuff.log (Permission denied)
        at java.io.FileInputStream.open(Native Method)

Camel端点后处理 - 这是Camel不会传播给我的东西:

{{1}}

0 个答案:

没有答案