我有一个带有2个服务的AppEngine应用,其中服务A使用任务(推送)队列为服务B排队任务。如何使用开发服务器对此进行测试?在开发服务器上运行多个服务时,每个服务都有一个唯一的端口号,并且任务队列无法解析URL,因为目标URL实际上在另一个端口上运行,即服务A在端口8080上,服务B在端口上端口8081。这在所有端口都位于同一端口的生产环境中都很好用,但是如何在本地进行测试?
答案 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
在您的情况下,仅通过调度文件就可以 来实现您想要的功能-即仍使用默认队列。试试看。