【问题标题】:How do I run system wide operations on a cluster of app-servers?如何在应用服务器集群上运行系统范围的操作?
【发布时间】:2011-04-23 21:45:31
【问题描述】:

我在一组非集群的 tomcat 服务器上运行我的应用程序。它提供restlet web 服务。按照 restful 范式,每次调用都是无状态的。

在这种环境下,我希望应用程序定期检查数据库的状态变化并采取行动。由于其中一项操作是发送电子邮件,因此我想确保在每个审核期间不会多次检查特定记录的状态。

我知道消息传递会帮助解决这种情况,但我不知道具体如何。周期性事件可以由应用程序的每个实例生成。有没有办法去抖动消息队列中的类似消息?什么工具最适合解决这个问题?

【问题讨论】:

  • 一位朋友推荐我使用 Quartz 来处理这个问题。看起来很合身。

标签: rest tomcat jms message-queue appserver


【解决方案1】:

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

当然,如果您这样做,您可以通过 id 或多个 Id 发布到您的 restlets 并让它们以这种方式工作。它不是异步的,但如果您只是想跨节点分配负载,它实际上并不需要异步。如果您的节点前面有一个负载均衡器,那么您只需将您的审核请求发布到负载均衡器,它就会在服务器之间传播请求。

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

【讨论】:

    猜你喜欢
    • 2017-09-15
    • 2021-12-01
    • 2016-03-25
    • 2016-04-09
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    • 2019-10-12
    相关资源
    最近更新 更多