Rest 如何在应用服务器集群上运行系统范围的操作?

Rest 如何在应用服务器集群上运行系统范围的操作?,rest,tomcat,jms,message-queue,appserver,Rest,Tomcat,Jms,Message Queue,Appserver,我正在一组未群集的tomcat服务器上运行我的应用程序。它为restletweb服务。按照restful范式,每个调用都是无状态的 在这种环境中,我希望应用程序定期检查数据库的状态更改并采取措施。因为其中一个操作是发送电子邮件,所以我希望确保我不会在每个审查期间多次检查特定记录的状态 我知道发消息会有助于解决这种情况,但我不知道具体是如何做到的。周期性事件可以由应用程序的每个实例生成。有没有一种方法可以消除消息队列中类似消息的缓冲?什么工具最适合解决此问题?您应该能够通过消息队列提供记录“ID”

我正在一组未群集的tomcat服务器上运行我的应用程序。它为restletweb服务。按照restful范式,每个调用都是无状态的

在这种环境中,我希望应用程序定期检查数据库的状态更改并采取措施。因为其中一个操作是发送电子邮件,所以我希望确保我不会在每个审查期间多次检查特定记录的状态


我知道发消息会有助于解决这种情况,但我不知道具体是如何做到的。周期性事件可以由应用程序的每个实例生成。有没有一种方法可以消除消息队列中类似消息的缓冲?什么工具最适合解决此问题?

您应该能够通过消息队列提供记录“ID”。如果您的应用正在侦听队列,则其中一个服务器将拾取每条消息,该服务器可以检查该id。问题是初始消息的生成。您需要一个feeder进程,该进程将查询要查看的记录,然后将消息放入队列

当然,如果您要这样做,您可以通过id或多个id发布到您的restlet,并让它们以这种方式工作。它不是异步的,但是如果您只是尝试在节点之间拆分负载,它实际上不需要异步。如果您的节点前面有一个负载平衡器,那么您可以将您的审阅请求发布到负载平衡器,它将在服务器之间分发请求


如果无法使用特定的记录ID。。。然后选择一些自然的方式来划分数据,并像推ID一样推那个分区键。根据数据集的大小,您可以推送“城市/州”或“名字的前两个字母”或“地区”或任何将数据集分成可管理的小块的内容。

一位朋友建议我使用Quartz来处理此问题。看起来很合身。