java - 谷歌应用程序引擎本地服务器手动缩放问题

标签 java spring google-app-engine

我有一个在 Google App Engine 的标准实例上运行的 Java Spring 应用程序。我们最近从自动缩放切换为手动缩放,以适应更长的 cronjobs。

我们在尝试本地运行服务器./gradlew startServer时遇到了问题。这是由于我们在 *appengine-web.xml 中进行了手动缩放配置”:

<instance-class>B8</instance-class>
<manual-scaling>
    <instances>1</instances>
</manual-scaling>

即使我们尝试将实例数设置为 1,Gradle 也会尝试启动应用程序超过 1 次,从而导致错误。只有当我将设置切换回自动缩放时,问题才得到解决:

<instance-class>@server.instance.class@</instance-class>
<automatic-scaling>
    <min-idle-instances>@min.idle.instances@</min-idle-instances>
    <max-idle-instances>@max.idle.instances@</max-idle-instances>
    <min-pending-latency>@min.pending.latency@</min-pending-latency>
    <max-pending-latency>@max.pending.latency@</max-pending-latency>
</automatic-scaling>

解决此问题的一个解决方案是将手动缩放转换为基于 env 的自动缩放,并使用脚本将其添加到 ./gradlew startServer 中。

从配置的角度来看,有没有一种方法可以不走脚本路线

最佳答案

这不是最优雅的解决方案,但它的优点是每次我想在本地启动服务器时都不必更改 .xml 文件。唯一的缺点是它迫使我像这样编写 xml:

<application>@sublink.project.id@</application><!-- unused for Cloud SDK based tooling -->
<service>sublink</service>
<runtime>java8</runtime>
<threadsafe>true</threadsafe>
<instance-class>@server.instance.class@</instance-class>

<!--<automatic-scaling>-->
    <!--<min-idle-instances>@min.idle.instances@</min-idle-instances>-->
    <!--<max-idle-instances>@max.idle.instances@</max-idle-instances>-->
    <!--<min-pending-latency>@min.pending.latency@</min-pending-latency>-->
    <!--<max-pending-latency>@max.pending.latency@</max-pending-latency>-->
<!--</automatic-scaling>-->

<manual-scaling>
    <instances>@scaling.manual.instances@</instances>
</manual-scaling>

<env-variables>
    <env-var name="SPRING_PROFILES_ACTIVE" value="@active.deploy.env@"/>
</env-variables>

然后在我的 build.gradle 中我这样做:

   from('src/main/webapp/WEB-INF')
include '*.xml'
into("build/exploded/WEB-INF")

filter(ReplaceTokens, tokens: props)

if (deployEnv == "local") {
    // Use a closure to remove lines
    filter { String line ->
        line.trim().startsWith('<instance-class>') ? null : line
    }
    filter { String line ->
        line.trim().startsWith('<manual-scaling>') ? null : line
    }
    filter { String line ->
        line.trim().startsWith('<instances>') ? null : line
    }
    filter { String line ->
        line.trim().startsWith('</manual-scaling>') ? null : line
    }
}

关于java - 谷歌应用程序引擎本地服务器手动缩放问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48233052/

相关文章:

java - 如何在服务激活器中处理 ProcessBuilder 时忽略 MessageHandlingException

django - 在 Google 应用引擎中找不到 ImportError : django. 实用程序

java - 如何解析使用谷歌低级 api 获取的 HTTPResponse 对象以获取 url-google app engine/java

java - Spring 启动: The bean 'auditLogDao' could not be injected as a 'AuditLogDao' because it is a JDK dynamic proxy

java - 如何在 Android 中实现多 TCP 客户端/单 TCP 服务器?

java - 有关 Spring MVC 消息转换器的一些信息?

python - 无法使用 python3 使 tesseract 在 Google 应用程序引擎中工作

java - 如何在java中构建elasticsearch terms查询?

java - Tomcat如何处理PermGen空间异常?

java - 为什么这里的交易被视为两个单独的交易?