Java 后端进程与计划任务
我有许多后端进程(java应用程序),它们全天候运行。为了监控这些后端(即检查流程是否没有响应并通过SMS/电子邮件通知),我编写了另一个应用程序 旧的后端现在以固定的时间间隔记录心跳,这个新的应用程序检查它们是否定期这样做,并在必要时通知 现在,我们有两个选择Java 后端进程与计划任务,java,monitoring,scheduled-tasks,backend,Java,Monitoring,Scheduled Tasks,Backend,我有许多后端进程(java应用程序),它们全天候运行。为了监控这些后端(即检查流程是否没有响应并通过SMS/电子邮件通知),我编写了另一个应用程序 旧的后端现在以固定的时间间隔记录心跳,这个新的应用程序检查它们是否定期这样做,并在必要时通知 现在,我们有两个选择 或者将其作为计划任务运行,每15分钟运行一次并在完成任务后停止;或者 将其作为另一个后端进程运行,睡眠时间为15分钟 我们现在可以预见的问题是,如果此监视器应用程序进入无响应状态,该怎么办?那么,我的问题是,这两种情况之间有什么区别
- 或者将其作为计划任务运行,每15分钟运行一次并在完成任务后停止;或者
- 将其作为另一个后端进程运行,睡眠时间为15分钟
环境:Java,托管在LINUX服务器上我会选择后端进程,因为它可以维护状态 看看陶土公司的石英调度器
它能够适应瞬态条件,您只需要提供一个简单的包装,这样,只要您在quartz.properties文件中正确地获得线程,monitor应用程序就应该是健壮的。通过调度任务,您的意思是由系统调度程序触发,还是作为现有后端进程中的调度线程触发 要捕获意外终止或无响应状态,最好运行单独的进程,而不是线程。然而,一个调度线程可以让您以更少的IPC开销与所属进程进行更紧密的交互 我将实现这两个目标。在每个后端进程中维护本地状态的记录,每个进程中的计划任务触发线程以更新该节点的当前状态。此更新可能相当频繁,因为它比与单独进程通信的成本更低
使用单独的“监控应用程序”流程定期收集有关所有后端流程的信息。这种情况应该不太频繁-无论进程是一直在运行,还是由cron作业调度,都无关紧要,因为状态保存在每个后端进程中。如果其中一个后端没有响应,此监控应用程序将能够确定缺少响应,并执行一些有意义的探测以确定问题所在。然后,该组件将通知您的SMS/电子邮件实用程序发送报告。您可以使用nagios core作为核心,使用Naptor监控您的应用程序。它很容易安装并嵌入到应用程序开发中 您可以通过此链接查看:
很抱歉,我不明白这在我的情况下如何适用。这些后端是托管在第三方服务器上的应用程序的一部分。您已经编写了应用程序,让quartz管理监控类的计划调用。使用cron调用东西可以给您带来灵活性问题-当计划维护开始时会有大量邮件我们有一个独立的(SMS/电子邮件)通知已经到位。我们只需要一个能告诉通知者何时通知的流程。我们想让它变得简单,成本更低。无论如何,非常感谢您的建议:)在这两种情况下,监视过程将作为单独的过程运行。在第一种情况下,它将在每x分钟后由系统调度器触发。在第二种情况下,它将是一个单独的进程,24/7运行,睡眠时间为x分钟。好的,正如我在回答中所解释的,监控进程的执行方法是学术性的,只要它不保持任何状态。就我个人而言,我可能会让它成为由cron作业触发的短期任务,只是为了确保我少担心一个长时间运行的可执行文件(监控应用程序也可能崩溃)。然而,完全缺乏报告应该足以警告那里出了问题。