【发布时间】:2018-01-19 00:17:59
【问题描述】:
我使用 Apache Camel 制作了一个与 AWS S3 完美集成的应用程序。代码如下:
Predicate newFilePred = header(NEW_FILE_RECEIVED_HEADER).isEqualTo(SUCCESS);
from(incomingEndpoint)
.process((exchange) -> {
logger.info("Checking S3 bucket.");
Date newFileUploadDate = (Date) exchange.getIn().getHeaders().get("CamelAwsS3LastModified");
if (fileIsNew(newFileUploadDate))
exchange.getIn().setHeader(NEW_FILE_RECEIVED_HEADER, SUCCESS);
} else {
exchange.getIn().setHeader(NEW_FILE_RECEIVED_HEADER, FAILURE);
}
})
.choice()
.when(newFilePred)
.to(outgoingEndpoint)
.endChoice()
.end();
该应用程序运行良好,但它会抛出一个非常烦人的警告,如下所示:
Camel Thread #1 - aws-s3://mybucket] | c.a.s.s.i.S3AbortableInputStream Not all bytes were read from the
S3ObjectInputStream, aborting HTTP connection. This is likely an error and may result in sub-optimal behavior.
Request only the bytes you need via a ranged GET or drain the input stream after use. request_id=
我知道问题是如果标题“NEW_FILE_RECEIVED_HEADER”设置为失败,我不会将文件的输出定向到任何地方。这是设计使然,因为在这种情况下我不想下载该文件。在我将文件识别为“不需要”之后,是否有告诉 Camel 正确中止连接?我可以创建另一个直接到“垃圾”目录的骆驼路线,但这些都是无用的循环。
感谢您的帮助!
【问题讨论】:
-
我不这么认为,正如您从 AWS 本身的文本中看到的那样,您需要排空流。我假设您无法提前知道是否要跳过此文件,因此您不能在 GET 调用中限制字节数。
-
如果是这种情况,那么我相信在有意取消的情况下抑制此警告会很好。您是否认为这足以进行增强?