我有一个 Java 工作者,它通过 Web 服务调用轮询外部队列系统的作业。
确保工人在任何给定时间都在工作的最可靠方法是什么?
我有一个 Java 工作者,它通过 Web 服务调用轮询外部队列系统的作业。
确保工人在任何给定时间都在工作的最可靠方法是什么?
JVM 执行与任何其他程序没有什么不同。因此,您要做的是将shell 脚本放在一起并将其放在/etc/init.d 中并将其适当地链接到/etc/rc.d。在 RedHat 风格上,它将确保服务随系统一起启动。
编写脚本可能很棘手,但我会复制现有脚本之一并将其更改为调用具有正确参数的 java 可执行文件。在此脚本中,您必须捕获 java 进程 ID。然后,您可以使用它来监控您的进程并根据需要重新启动。
该java.util.concurrent
软件包为此类工作提供了一个简单、可靠的框架。
这是一些可行的代码的简单示例:
import java.util.concurrent.*;
public static void main(String[] args)
{
ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
// Here's an anonymous class, but your should probably create a class for this
Runnable poll = new Runnable()
{
public void run()
{
// put your polling code here
}
};
// Have your code called every 5 seconds like this:
service.scheduleAtFixedRate(poll, 0, 5, TimeUnit.SECONDS);
}