我正在使用Google AppEngine的多个模块,并想知道是否可以运行开发服务器(java版本),以便分配给不同模块的端口始终相同?目前他们似乎是随机的。我可以决定这些端口吗?我希望能够以可持续的方式(从发展的角度)与模块之间建立沟通。目前,如果我们有两个模块,让我们称它们为A和B,我们想要使用模块B中模块A公开的服务,没有简单的方法可以知道从模块B中命中哪个URL。
答案 0 :(得分:8)
可以使用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
我希望它有所帮助。
答案 1 :(得分: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>
答案 2 :(得分:1)
我认为谷歌不会提供任何简单的方法来解决这个问题。您必须使用the modules service并使用LinkFactory
和getLinkToA(String)
等方法将其包装到助手类(例如getLinkToB(String)
)中,并将它们创建到您创建链接的所有位置模块。
如果您使用the dispatch file,则问题相同(也就是更大)。这实际上是一个更大的问题,因为前端应用程序的某些部分可能会失败,因为路由在开发服务器中不起作用。
答案 3 :(得分:-2)
虽然modules service在这种情况下可能有用,我相信它会起作用,但我会以一种不同的方式解决问题。
我修改了我的构建脚本以运行localhost上的所有模块,但是在不同的端口上(实际上有一些本地的appengine实例正在运行)。配置信息(IP:PORT)存储在配置文件中,任何模块都可以轻松访问。对于部署,我仍然将应用程序打包到 ear 存档中。