【问题标题】:GAE modules on development server开发服务器上的 GAE 模块
【发布时间】:2013-11-21 05:36:33
【问题描述】:

我在 Google AppEngine 中使用多个模块,想知道是否可以运行开发服务器(java 版本)以便分配给不同模块的端口始终相同?目前,它们似乎是随机的。我可以决定这些端口吗?我希望能够以可持续的方式(从开发角度)在模块之间建立通信。目前,如果我们有两个模块,我们称它们为 A 和 B,并且我们想在模块 B 中使用模块 A 公开的服务,没有简单的方法可以知道从模块 B 中访问哪个 URL。

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    可以使用JVM参数设置每个模块的端口。

    -Dcom.google.appengine.devappserver_module.{module_name}.port=8081
    

    我使用具有以下配置的 appengine-maven-plugin(我的定制模块称为“分析”):

    <plugin>
       <groupId>com.google.appengine</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <configuration>
          <jvmFlags>
             <jvmFlag>-Ddatastore.backing_store=${project.basedir}/target/local_db.bin</jvmFlag>
             <jvmFlag>-Xdebug</jvmFlag>
             <jvmFlag>-Dcom.google.appengine.devappserver_module.analysis.port=8081</jvmFlag>
             <jvmFlag>-XX:MaxPermSize=512m</jvmFlag>
             <jvmFlag>-agentlib:jdwp=transport=dt_socket,address=8001,server=y,suspend=n</jvmFlag>
          </jvmFlags>
          <enhancerApi>JPA</enhancerApi>
          <fullScanSeconds>2</fullScanSeconds>
       </configuration>
    </plugin>
    

    当我运行 mvn appengine:devserver 时,对应于该模块的日志如下:

    [INFO] INFO: Started SelectChannelConnector@127.0.0.1:8081
    [INFO] Jun 10, 2014 10:44:16 AM com.google.appengine.tools.development.JettyContainerService startHotDeployScanner
    [INFO] INFO: Full scan of the web app in place every 2s.
    [INFO] Jun 10, 2014 10:44:16 AM com.google.appengine.tools.development.AbstractModule startup
    [INFO] INFO: Module instance analysis is running at http://localhost:8081/
    [INFO] Jun 10, 2014 10:44:16 AM com.google.appengine.tools.development.AbstractModule startup
    [INFO] INFO: The admin console is running at http://localhost:8081/_ah/admin
    [INFO] Jun 10, 2014 11:44:16 AM com.google.appengine.tools.development.DevAppServerImpl doStart
    [INFO] INFO: Dev App Server is now running
    

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      您可以通过模块的appengine-web.xml 文件中的系统属性设置模块的端口。例如:

      <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
          <module>MY_MODULE</module>
          <version>v1</version>
          <threadsafe>true</threadsafe>
          <system-properties>
              <property name="com.google.appengine.devappserver_module.MY_MODULE.port"
                  value="8081"/>
          </system-properties>
      </appengine-web-app>
      

      【讨论】:

        【解决方案3】:

        我认为 Google 不会提供任何简单的方法来解决这个问题。您必须使用 the modules service 并将其包装到您的帮助程序类中,例如 LinkFactory 以及 getLinkToA(String)getLinkToB(String) 等方法,并且在您创建模块链接的任何地方都可以使用它们。

        如果你使用the dispatch file,同样的(和更大的)问题是。这实际上是一个更大的问题,因为您的前端应用程序的某些部分可能会失败,因为路由在开发服务器中不起作用。

        【讨论】:

        • 必须承认让事情轻松开始是一个巨大的问题。
        【解决方案4】:

        虽然modules service 在这种情况下可能很有用,而且我相信它会起作用,但我以不同的方式解决了这个问题。

        我修改了构建脚本以在 localhost 上运行所有模块,但在不同的端口上(基本上有一些本地 appengine 实例正在运行)。配置信息 (IP:PORT) 存储在配置文件中,任何模块都可以轻松访问。对于部署,我仍然将应用程序打包到 ear 存档中。

        【讨论】:

        • 你能分享你的配置设置吗?
        • 这不是一个有用的答案,因为它推荐的方法与既定做法和 Google 自己的文档完全不同。最好的答案是 nomukaiki,因为这正是 Google 官方示例应用程序的做法。
        猜你喜欢
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 2017-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多