2

我一直在审查 appengine 中的新“模块 API ”,并尝试以一种方式组织应用程序,使最苛刻的任务通过 dispatch.yaml 路由到通过模块配置更强大的实例。

但是,当尝试在调度程序中配置“ /mapreduce/ ”uri时,它们似乎从未在正确的模块中运行,它们总是在默认模块中运行。

调度程序看起来像这样:

application: simple-sample
dispatch:
  - url: "*/mapreduce/*"
    module: bigger-instance

  - url: "*/_ah/pipeline/*"
    module: bigger-instance

这些模块被定义为文档状态,包含 mapreduce 处理程序条目的默认 inapp.yaml和更大实例bigger-instance.yaml,但到目前为止,每个 mapreduce/* 进程根据日志在默认处理程序中执行,得到 404,因为处理程序是在其他地方定义的.

有任何想法吗 ?

4

1 回答 1

3

最简单的选项是设置targetmapreduce 管道的属性。

pipeline = mapreduce.mapreduce_pipeline.MapreducePipeline( ... )
pipeline.with_params(target="version-dot-module")
pipeline.start()

target将传递到任务队列并覆盖您遇到的任务队列默认路由。如果指定模块没有匹配的版本,则使用该模块的默认版本。您可以仅指定"version",在这种情况下,将应用默认模块。指定不存在的模块将针对默认模块的默认版本,即使默认模块有匹配的版本。


也可以为选定的任务队列定义一个目标,然后将您的管道路由到该队列。这种方法的局限性在于路由适用于调用代码的所有版本,但将路由详细信息保存在 yaml 文件中而不是代码库中也许是有好处的。

于 2014-01-24T02:29:57.750 回答