7

最近、AWSCamelについて質問がありましたが、最終的には苦労しました。現在、アプリケーションは動作しているようですが、非常に奇妙な例外が発生しています。

まず、私のアプリは 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" + "&region=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 が含まれている必要があります。

アプリケーションは動作しますが、キュー内のメッセージを削除できません。理由がわかりません。追加のセキュリティ資格情報が必要ですか?

とにかく助けてくれてありがとう

4

2 に答える 2

8

このエラーは、Camel SQS エンドポイントが出力ヘッダーで見つけられないメッセージ ハンドルの null 値が原因で発生します。おそらくチェックを追加し、これが発生したときに警告をログに記録する必要があります...

解決するには、SQS プロデューサーによって設定されたヘッダーがルートの最後まで確実に渡されるようにする必要があります。どこかに新しいヘッダーを設定する場合は、入力からもコピーする必要があります。そうしないと、それらは失われます。

于 2013-07-31T09:06:15.637 に答える