【问题标题】:How to run periodic process in Heroku Java app that makes web requests如何在发出 Web 请求的 Heroku Java 应用程序中运行定期进程
【发布时间】:2013-08-29 02:37:23
【问题描述】:

根据我对 Heroku 平台的理解,每个应用程序只允许一个 dyno 可以处理 HTTP 请求。在 Java 应用程序中,我的目标是每天运行一次或两次定期进程,从 Facebook 服务器获取信息并进行相应处理。如果后台工作人员 dyno 无法处理 Web 请求,那么我应该如何在 Web dyno 中编写一个重复发生的进程?

【问题讨论】:

  • 为什么不编写一个执行该任务的独立程序并使用 Heroku 调度程序插件每天运行一次?
  • 我正在研究这样的方法,但我遇到了与网络路由相同的问题。调度程序本质上是一个一次性进程,它会定期运行,并且根据 Heroku 的一次性进程无法接收 HTTP 流量(请参阅 link 的形成 dynos 与一次性 dynos)
  • 您能否解释一下为什么需要该流程来接收网络请求?如果该流程应该“从 Facebook 服务器获取信息”,那么听起来您的流程将调用 Facebook,而不是相反。一次性测功机完全可以做到这一点。
  • 是的,这就是我所做的一切,它只会从 Facebook 服务器请求信息。我假设后台进程无法处理 HTTP 请求这一事实意味着它无法处理 HTTP 协议周期。我可能错误地假设了,我试图作为一个周期性过程执行的操作没有问题。

标签: java heroku


【解决方案1】:

在这个意义上,“处理 HTTP 请求”是指连接的监听端而不是发送端。在 Heroku 上,一个应用程序可以有一个 Web 进程* 来监听 HTTP 连接以及许多其他发起/发送 HTTP 请求(或连接到其他非 HTTP 系统)的进​​程。

*注意:您可以根据需要分配尽可能多的 Dynos 来运行每个进程。

要运行定期向外部服务(如 Facebook)发出请求的进程,您可以使用Heroku Scheduler Add-on。然后,您可以将结果存储在众多 relational or NoSQL data-storage add-ons 之一中,也可以通过消息传递插件(如 CloudAMQP)将结果发送到其他进程。

【讨论】:

  • 好的,这听起来不错。我唯一的问题是 Heroku Scheduler 插件是否有运行时间限制?如果它允许合理的时间量应该没问题,但如果少于 10-15 分钟,则应用程序真正扩展时可能没有足够的时间。
  • 没有时间限制,但无论流程运行多长时间,您都会收到账单。
【解决方案2】:

如果平台限制了你,为什么要使用它?
还有其他平台可以让您执行此操作。 您可以使用OpenShift 轻松地将 java 应用程序部署到云中,然后就我所知,您可以毫无限制地使用 java API。
OpenShift 也使用 git,与 Heroku 一样。
它们都是 PaaS,所以概念是完全一样的,我认为你可以很容易地尝试 OpenShift。
您也可以查看 Google App Engine 是否有此类限制。
很抱歉没有帮助您解决具体问题,我只是知道至少“一个竞争对手”没有这样的限制。

【讨论】:

  • 如果没有解决此限制的方法,在这种情况下可能值得研究另一个 PaaS。在 Heroku 之外有另一台服务器来处理这个维护任务是否可行? (后台进程只更新数据库中的值)
  • @Ryan Sasson - 您将在哪里托管此服务器以及谁将负责其部署?您在云端也不需要它吗?
猜你喜欢
  • 2018-02-08
  • 2016-03-11
  • 2017-11-28
  • 2018-09-18
  • 1970-01-01
  • 2012-12-19
  • 2023-01-31
  • 2019-07-23
  • 2019-03-13
相关资源
最近更新 更多