【问题标题】:How do I find out that the server with the rabbitmq consumer is down?如何发现具有rabbitmq 消费者的服务器已关闭?
【发布时间】:2020-10-20 17:27:42
【问题描述】:

我有一个生产者服务器和一个消费者服务器。生产者服务器将时间发送到 rabbitmq 队列。消费者获取时间并将其放入 ScheduledExecutorService 池中。在指定时间,消费者完成任务。我担心我的消费者会掉下来,我会丢失数据。所以我需要实时知道我的消费者服务器何时崩溃。但我没有找到如何实现它。请告诉我该怎么做?

【问题讨论】:

  • 如果你的消费者在处理rabbitmq消息之前失败了,那么rabbitmq将不会从你的服务器得到确认并再次发送消息。因此,如果您的消费者失败,您不应该丢失数据。如果消息失败,您可以重试,并在多次重试后将消息发送到单独的死信队列。
  • 但是我怎么知道消费者在任务中摔倒了呢?它将任务存储在 ScheduledExecutorService 池中。
  • 在我看来,您正试图将两个不同的排队系统联系在一起以构建第三个系统,并且最好为这项工作找到一个更好的工具 - 即可以集中管理列表的工具计划任务,并跟踪其状态。

标签: java spring-boot rabbitmq amqp


【解决方案1】:

您可以使用众多可用服务之一来监控您的服务器并报告它是否无响应。例如,您可以使用 https://uptimerobot.com/ 并在您的服务上公开一个简单的 HTTP 端点,然后在它变得不可用时报告。还有许多其他全面的监控服务可用,例如:datadog、monitis、new relic 等。或者,您可以通过拥有另一台服务器来构建您自己的服务,该服务器定期检查您的消费者服务器上的 HTTP 端点或任何可用的东西,如果它是则通知您不。

话虽如此,我建议更改您的使用者以避免数据丢失,因为您正在为您的使用者创建计划任务,我建议您查看 Quartz 调度程序并使用它来安排和处理您的工作,而不是使用定制的解决方案。如果您使用像 JDBCJobStore 这样的持久存储,Quartz 将确保您的作业即使在失败后也能运行。 http://www.quartz-scheduler.org/overview/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 2018-05-10
    • 2016-07-05
    • 1970-01-01
    相关资源
    最近更新 更多