【问题标题】:Google Cloud Endpoint - How to create handler to call endpoints from cronGoogle Cloud Endpoint - 如何创建处理程序以从 cron 调用端点
【发布时间】:2016-07-26 16:13:36
【问题描述】:

更新问题
我找不到任何示例或教程来通过处理程序从 cron 调用端点。
没有任何后端服务经验!!

旧的描述和代码
我通过 Android Studio 在 AppEngine 上为我的 Android 应用部署了一个 GCE 模块。 我能够通过我的 Android 应用程序中的端点客户端存根创建和获取信息。 对于清理应用引擎上的数据,有一个简单的方法可以比较并删除任何超过 5 天的数据。
如果通过java代码调用此方法运行良好。

我创建的 cron 存在问题。我不确定它是在运行还是在我的端点类中调用了正确的方法。在自动运行它时需要帮助。

我有不同的方法来声明方法名称和路径以及 cron 中的 url 条目,但还没有成功。

stackoverflow 上的其他解决方案我不清楚。

端点类方法

@ApiMethod(name = "cron.cleanData", path="cron/cleanData")
    public void cleanData(@Nullable @Named("cursor") String cursorString,
                                @Nullable @Named("count") Integer count) throws NotFoundException {
        System.out.print("cleanData... called");
        CollectionResponse<Data> listData = listData(cursorString, count);
        for (Data data : listData.getItems()) {
            System.out.print("for..");
                if(isOld(data.getTime(), data.getDate())){
                    removeData(data.getId());
                    System.out.print("removed.."+data.getId());
                }
        }
    }

WEB-INF中的cron.xml

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
    <cron>
        <url>/cleanData</url>
        <description>Clean Storage</description>
        <schedule>every 1 minutes</schedule>
        <timezone>America/Hawaii</timezone>
    </cron>
</cronentries>

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" version="2.5">
   <servlet>
        <servlet-name>SystemServiceServlet</servlet-name>
        <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
        <init-param>
            <param-name>services</param-name>
            <param-value><MY_PACKAGE>.MyEndpoint</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>SystemServiceServlet</servlet-name>
        <url-pattern>/_ah/spi/*</url-pattern>
    </servlet-mapping>
    <filter>
        <filter-name>ObjectifyFilter</filter-name>
        <filter-class>com.googlecode.objectify.ObjectifyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ObjectifyFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>cron</web-resource-name>
            <url-pattern>/cron/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <role-name>admin</role-name>
        </auth-constraint>
    </security-constraint>
</web-app>

【问题讨论】:

  • 我没看懂那里的答案
  • 你能分享任何代码示例吗?
  • 有什么更新吗?连我都不知道怎么办。我到处搜索,他们所做的只是回复 GCE 文档中所说的相同内容。

标签: java android google-app-engine android-studio cron


【解决方案1】:

您不能从 cron 作业调用 Google Cloud Endpoint。相反,你 应该向由处理程序服务的目标发出请求,该处理程序是 在应用程序的配置文件或调度文件中指定。那 然后处理程序调用适当的端点类和方法。

您可以找到更多详细信息here

【讨论】:

  • 我不知道后端 :( 。你能和我分享一些例子吗?
  • 只需将您的 cron 作业创建为常规 Servlet。查看this 教程。无论如何,如果您没有服务器端开发经验,您将不得不投入一些时间。
  • This answer 回答类似的问题可能会有所帮助。
  • 我已经看到了。我不清楚。部署时我有什么问题吗?我正在使用 Android Studio 进行部署。但目前使用 build and run 操作在我的机器上进行本地测试。
  • 没有服务器经验 :(
猜你喜欢
  • 2017-01-24
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
  • 2019-06-14
  • 2016-07-15
  • 2018-12-20
  • 2017-04-05
  • 2020-06-26
相关资源
最近更新 更多