我最近有一个关于AWS和Camel的问题,但最后我还是坚持了下来。现在该应用程序似乎可以正常工作,但是我遇到了一个非常奇怪的异常。
首先,我的应用程序分为两个 EC2 实例。实例一从 Amazon RSS Feed 中获取前 10 本书的 ISBN 并将其存储到一个。这是代码片段。
public static void main(String[] args) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from(
"rss:http://www.amazon.de/gp/rss/bestsellers/books/ref=zg_bs_books_rsslink?splitEntries=false")
.split()
.method("RssSplitter", "split")
.process(new Dummy())
.setProperty("isbn", simple("${body}"))
.to("aws-sqs://bookz_sqs?accessKey=acceskey&secretKey=secretKey");
}
});
context.start();
Thread.sleep(10000);
context.stop();
}
实例二负责读取 SQS 作为第一个操作,最后从 WWW 中的其他 Booklibraries 中获取额外的 Book 信息没有问题,最后构建一个 RSS Feeder 也没有问题。
public static void main(String[] args) throws Exception {
/*
* Here the sqs camel route gets the ISBN out of the queues and stores it in S3.
*/
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("aws-sqs://bookz_sqs" + "?accessKey=accessKey" + "&secretKey=secretKey").process(new DynamicIsbnEnrich()).process(
new DynamicIsbndbEnrich()).process(new DynamicOpLibEnrich()).setHeader(S3Constants.KEY, simple("${property.isbn}")).to(
"aws-s3://bookz" + "?accessKey=accesKey" + "&secretKey=secretKEy" + "®ion=eu-west-1");
}
});
context.start();
Thread.sleep(10000);
context.stop();
}
现在的问题是一个奇怪的异常,我不明白,除了 SQS 没有从我的队列中删除消息,但是 api 说 deleteAfter Read 默认为 true。
2012-12-17 19:45:08,335 [Camel (camel-1) 线程 #0 - aws-sqs://team09bookz_sqs] 警告 org.apache.camel.component.aws.sqs.SqsConsumer - 删除消息时出错。 . 引起:[com.amazonaws.AmazonServiceException - 请求必须包含参数 MessageHandle。] 状态代码:400,AWS 服务:AmazonSQS,AWS 请求 ID:0655aa05-ad6f-5571-a83d-e34cc7196343,AWS 错误代码:MissingParameter, AWS 错误消息:请求必须包含参数 MessageHandle。
该应用程序有效,但我无法删除队列中的任何消息,我不知道为什么,我需要一些额外的安全凭证吗?
无论如何感谢您的帮助