最近、AWSとCamelについて質問がありましたが、最終的には苦労しました。現在、アプリケーションは動作しているようですが、非常に奇妙な例外が発生しています。
まず、私のアプリは 2 つの EC2 インスタンスに分割されています。インスタンス 1 は、Amazon RSS フィードから上位 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();
}
インスタンス 2 は、最初の操作として SQS を読み取り、最後に WWW の他の Booklibraries から追加の書籍情報を取得します。
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 - The request must include the parameter MessageHandle.] ステータス コード: 400、AWS サービス: AmazonSQS、AWS リクエスト ID: 0655aa05-ad6f-5571-a83d-e34cc7196343、AWS エラー コード: MissingParameter、 AWS エラー メッセージ: リクエストにはパラメータ MessageHandle が含まれている必要があります。
アプリケーションは動作しますが、キュー内のメッセージを削除できません。理由がわかりません。追加のセキュリティ資格情報が必要ですか?
とにかく助けてくれてありがとう