首页 > 解决方案 > 无法在开发本地机器的服务之间共享共享任务队列和数据存储区 - Google App Engine Java 标准环境

问题描述

具有多种服务的 GAE 应用程序:

module_1 - default
module_2 - backend using datastore
module_3 - Taskqueues and cron job

module_2被添加为依赖项,module_3datastore使用module_2. 所有模块(1、2、3 和数据存储)都位于测试和生产中部署的不同虚拟机中。

我在本地开发机器中部署的相同代码,使用命令 gradle appengineRun所有三个模块 <project_home>/module_<1/2/3>$ gradle appengineRun,所有项目都创建自己的数据存储和任务队列。

试过以下:

1.调度程序.xml

<?xml version="1.0" encoding="UTF-8"?>
<dispatch-entries>
    <dispatch>
        <!-- Default module serves the typical web resources and all static resources. -->
        <url>*/favicon.ico</url>
        <module>module_1</module>
    </dispatch>
    <dispatch>
        <!-- Default module serves simple hostname request. -->
        <url>simple-sample.appspot.com/</url>
        <module>module_1</module>
    </dispatch>
    <dispatch>
        <!-- Send all mobile traffic to the mobile frontend. -->
        <url>*/v2/*</url>
        <module>module_2</module>
    </dispatch>
    <dispatch>
        <!-- Send all work to the one static backend. -->
        <url>*/v3/*</url>
        <module>module_3</module>
    </dispatch>
</dispatch-entries>
  1. 将后端转换为服务:尚未尝试过,这需要大量重构,例如电影cron.xmlqueue.xmlfrom module_3to module_1。由于该系统在舞台和生产中使用相同的配置,因此必须有办法使其在本地工作。
  1. Java DevServer 的 Appengine 本地数据存储位置配置

标签: javagoogle-app-engine

解决方案


无论是否将后端实际转换为服务,您需要记住的是队列、数据存储索引、cron 和调度配置是应用程序级别的配置,由所有应用程序的服务共享(无论来自哪个服务它们实际上已部署)。但是在本地开发时,开发服务器可能需要一些实际存在于每个服务中的文件(并且包含跨服务一致的配置)。看到某种相关的我是否需要在每个使用它的微服务(模块)中或仅在根应用程序中定义数据存储索引?. 根据需要,可以将类似的方法应用于其他应用程序级别的共享配置。

由于您的服务共享数据存储,因此为了正确执行本地开发,您还需要单个数据存储模拟。这意味着:

但我不是 Java 用户,我不确定这些方法是否/如何适用于 java,开发服务器与我使用的 python 完全不同。

旁注:您不需要为default模块添加调度规则 - 这是默认情况下发送不匹配任何其他调度规则的请求的地方。


推荐阅读