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



我有一个AppEngine应用程序,它有两个服务,其中服务A使用任务(推送(队列为服务B排队。如何使用开发服务器对此进行测试?当使用开发服务器运行多个服务时,每个服务都会获得一个唯一的端口号,并且任务队列无法解析URL,因为目标URL实际上在另一个端口上运行,即服务a在端口8080上,服务B在端口8081上。这一切在生产中都很有效,因为所有东西都在同一个端口上,但我如何在本地进行测试?

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

目标(推送队列(

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

当构造用于任务的HTTP请求。例如,如果您的应用程序ID是我的应用程序,并且您将目标设置为的版本。我的服务URL主机名将设置为我的版本。我的服务。我的应用程序。appspot.com.

如果未指定目标,则在同一版本上调用任务他们排队的申请。所以,如果你排队任务,而不指定目标在队列中,任务在默认应用程序版本中被调用。请注意,如果默认应用程序版本在任务已入队,执行时间,然后是任务将在新的默认版本中运行。

如果您将服务与调度文件一起使用,则您的任务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

在您的情况下,可能只需一个调度文件就可以实现您想要的目标,即仍然使用默认队列。试试看。

最新更新