3

GAE for Java でバックアップ ジョブをプログラムで実行したいと考えていました。そこで、ここで説明するコードを移植して、Appengine for Java で動作するようにしました。

Queue queue = QueueFactory.getDefaultQueue();

String backendAddress = BackendServiceFactory.getBackendService().getBackendAddress("ah-builtin-python-bundle");
    TaskOptions taskOptions = withUrl("/_ah/datastore_admin/backup.create")
            .method(TaskOptions.Method.GET)
            .param("name", "Backup_Task")
            .param("filesystem", "gs")
            .param("gs_bucket_name", "backup_bkt")
            .param("queue", queue.getQueueName())
            .header("Host", backendAddress).
            .param("kind", "customer")
            .param("kind", "address")
 queue.add(taskOptions);

すべてが正しいようです。上記のコードを実行すると、キューをプッシュするタスク呼び出しが追加されますが、ah-builtin-python-bundle では実行されませんが、明らかに 404 を返すアプリのデフォルト バージョンで実行されます。以下のログを参照してください。

2013-10-02 15:58:27.315 /_ah/datastore_admin/backup.create?name=Backup_Task&filesystem=gs&gs_bucket_name=backup&queue=next-version&kind=address&kind=customer 404 26ms 0kb AppEngine-Google; (+ http://code.google.com/appengine ) 0.1.0.2 - - [02/Oct/2013:08:58:27 -0700] "GET /_ah/datastore_admin/backup.create?name=Backup_Task&filesystem=gs&gs_bucket_name =backup&queue=next-version&kind=address&kind=customer HTTP/1.1" 404 294 " http://version.myapp.appspot.com/tasks/backup " "AppEngine-Google; (+ http://code.google.com/ appengine )" "version.myapp.appspot.com" ms=26 cpu_ms=47 cpm_usd=0.000033 queue_name=次のバージョン task_name=3563633336363 app_engine_release=1.8.5 インスタンス=xxxxxxxxxxxxxxx

ここで同じことをしているコードも見ましたが、正しく機能するかどうかはわかりません。

私は何が欠けているのだろうか?

4

1 に答える 1

5

私が見つけた解決策は次のとおりです。

Queue queue = QueueFactory.getQueue("backupQueue");
TaskOptions taskOptions = withUrl("/_ah/datastore_admin/backup.create")
            .method(TaskOptions.Method.GET)
            .param("name", 'Backuptask')
            .param("filesystem", "gs")
            .param("gs_bucket_name", BACKUP_BUCKET + '/' + DateTime.now().toString("yyyy/MM/dd/'" + nameSpace + "'-HH-mm"))
            .param("namespace", NamespaceManager.get();)
            .param("queue", queue.getQueueName())
            .param("kind", "customer")
            .param("kind", "address");
queue.add(taskOptions);

トリックは、backupQueuewhich をターゲットにするものを使用することでしたah-builtin-python-bundlequeue.xmlこれを行うには、次を:`に追加します。

<queue> <!-- a queue for backups tasks --> <name>backupQueue</name> <rate>1/s</rate> <bucket-size>10</bucket-size> <max-concurrent-requests>3</max-concurrent-requests> <retry-parameters> <!-- only 1 retry attempt --> <task-retry-limit>2</task-retry-limit> </retry-parameters> <target>ah-builtin-python-bundle</target> </queue>

于 2014-06-28T00:56:22.763 に答える