首页 > 解决方案 > Poller 在从 SQS 读取时是否应该抛出或处理异常?

问题描述

我正在编写一个自定义 java SQS Poller 以从 Amazon SQS 中读取并对消息进行一些操作。它是一个多线程应用程序,它将产生一个固定的线程池,每个线程都将监听 SQS。

现在,我对实现的一个方面有疑问,比如在从 SQS 接收或删除消息时,我遇到了一些异常,我应该抛出异常并从那里退出该线程吗?或者我应该只捕获异常而不抛出它并重试再次接收消息?在第二种情况下,要知道它无法正常工作,我可能会发布一些可以创建警报的指标,以便我知道这种情况是否经常发生。

建议的一种或更好的做法是哪种方式?

标签: javaamazon-web-serviceslisteneramazon-sqs

解决方案


如果您在与 SQS 的通信方面遇到问题,您应该在异常发生的地方捕获并记录它。你可以有一些重试策略,这取决于你。记录这些问题,然后您可以更准确地解决问题。

我不会从创建异常的线程中出去以在其他地方捕获它。在我看来,它应该在它发生的地方送达。如果重试过程失败,我会记录每一次重试和最终消息。


推荐阅读