我正在编写一个自定义Java SQS Poller以从Amazon SQS读取并对消息进行一些操作。它是一个多线程应用程序,它将产生一个固定的线程池,并且每个线程都将侦听SQS。
现在,我对实现的一个方面感到怀疑,例如,在从SQS接收或删除消息时,我遇到了一些异常,是否应该抛出异常并从那里退出该线程?还是应该只捕获异常而不抛出异常,然后重试以再次接收消息?在第二种情况下,要知道它无法正常工作,我可能会发布一些指标,以根据这些指标创建警报,以便我知道这种情况是否发生了很多。
建议的哪种方法是更好的做法?
答案 0 :(得分:2)
如果与SQS的通信有问题,则应在发生异常的地方捕获并记录该异常。您可以制定一些重试策略,具体取决于您。记录这些问题,然后您可以更精确地解决问题。
我不会离开创建异常的线程来在其他地方捕获它。根据我的看法,应将其放到发生的地方。如果重试过程失败,我将记录所有重试和最终消息。