我在一组非集群的 tomcat 服务器上运行我的应用程序。它提供restlet web 服务。根据 restful 范式,每个调用都是无状态的。
在这种环境中,我希望应用程序定期检查数据库的状态更改并采取措施。由于其中一项操作是发送电子邮件,因此我想确保在每个审核期间不会多次检查特定记录的状态。
我知道消息传递会帮助解决这种情况,但我不明白具体如何。周期性事件可以由应用程序的每个实例生成。有没有办法去抖动消息队列中的类似消息?什么工具最适合这个问题?
我在一组非集群的 tomcat 服务器上运行我的应用程序。它提供restlet web 服务。根据 restful 范式,每个调用都是无状态的。
在这种环境中,我希望应用程序定期检查数据库的状态更改并采取措施。由于其中一项操作是发送电子邮件,因此我想确保在每个审核期间不会多次检查特定记录的状态。
我知道消息传递会帮助解决这种情况,但我不明白具体如何。周期性事件可以由应用程序的每个实例生成。有没有办法去抖动消息队列中的类似消息?什么工具最适合这个问题?
您应该能够通过消息队列提供记录“ID”。如果您的应用程序正在侦听队列,则每条消息都将被其中一台服务器拾取,并且该服务器可以检查该 id。问题是初始消息的生成。您将需要一个馈送进程来查询要审查的记录,然后将消息放入队列中。
当然,如果您这样做,您可以通过 id 或多个 Id 发布到您的 restlets 并让它们以这种方式工作。它不是异步的,但如果您只是想跨节点分配负载,它实际上并不需要异步。如果您的节点前面有一个负载均衡器,那么您只需将您的审核请求发布到负载均衡器,它就会在服务器之间传播请求。
如果您不能使用特定的记录 id...然后选择一些自然的方式来分区您的数据并推送该分区键,就像您推送 id 一样。根据数据集的大小,您可以推送“城市/州”或“名称的前两个字母”或“区域”,或者任何将您的数据集分解为可管理的小块的内容。