从 SQS 读取数据时,Poller 应该抛出异常还是处理异常?

Should Poller throw or handle a exception while reading from SQS?

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

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

建议的方法或更好的做法是什么?

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

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