使用任务队列测试多个AppEngine服务

时间:2018-11-26 16:19:41

标签: google-app-engine task-queue

我有一个带有2个服务的AppEngine应用,其中服务A使用任务(推送)队列为服务B排队任务。如何使用开发服务器对此进行测试?在开发服务器上运行多个服务时,每个服务都有一个唯一的端口号,并且任务队列无法解析URL,因为目标URL实际上在另一个端口上运行,即服务A在端口8080上,服务B在端口上端口8081。这在所有端口都位于同一端口的生产环境中都很好用,但是如何在本地进行测试?

1 个答案:

答案 0 :(得分:1)

推送队列配置允许按名称指定目标服务,开发服务器可以理解该名称。来自Syntax

  

目标(推送队列)

     

可选。命名服务/版本,前端版本或   后端,可以在其上执行所有排队的任务   队列。

     

在以下情况下,该字符串会加在您应用的域名之前   为任务构造HTTP请求。例如,如果您的应用ID   是 my-app ,并且您将目标设置为 my-version.my-service ,   URL主机名将设置为    my-version.my-service.my-app.appspot.com

     

如果未指定目标,那么将在相同版本上调用任务   排队的应用程序的名称。因此,如果您将一个   默认应用程序版本中的任务,但未指定目标   在队列上,该任务在默认应用程序版本中被调用。   请注意,如果默认应用程序版本在时间之间有所变化   任务入队及其执行时间,然后任务   将在新的默认版本中运行。

     

如果您与dispatch file一起使用服务,则您的任务是   HTTP请求可能被拦截并重新路由到另一个服务。

例如,基本的queue.yaml将遵循以下原则:

queue:

- name: service_a
  target: service_a

- name: service_b
  target: service_b

我不确定100%是否足以满足要求,就我个人而言,我还使用了dispatch.yaml文件,因为我需要路由除任务之外的其他请求。但是为此,您需要在URL中有一个定义明确的模式,因为开发服务器不支持基于主机名的模式。例如,如果服务A的请求使用/service_a/...路径,而服务B的使用/service_b/...路径,那么这些将达到目的:

dispatch:

- url: "*/service_a/*"
  service: service_a

- url: "*/service_b/*"
  service: service_b

在您的情况下,仅通过调度文件就可以 来实现您想要的功能-即仍使用默认队列。试试看。