我想编写一个Java接口来解耦特定技术,转发异常的最佳方式是什么。让我们说我想要脱离的技术是Amazon SQS。 Amazon SQS本质上是一个队列服务,我希望尽可能灵活,我希望可以选择使用RabbitMQ或其他队列服务轻松替换SQS。
这是我到目前为止所拥有的:
public interface QueueService {
// URL of the Queue Server
public void setURL(String url);
public String getURL();
public Msg getMessage() throws QueueServiceException;
public void deleteMessage(String messageId) throws QueueServiceException;
}
getMessage的SQS实现可能相当简单,它只使用Amazon AWS Java SDK,实质上是AmazonSQS类的receiveMessage方法。以下是AWS Java SDK中此方法的签名:
public ReceiveMessageResult receiveMessage(ReceiveMessageRequest receiveMessageRequest) throws AmazonServiceException, AmazonClientException;
现在我的问题是我在QueueService接口的实现中如何处理这些异常...我是否只捕获这些异常(特定于特定技术)并重新抛出为QueueServiceException?
try {
messages = amazonSQS.receiveMessage(receiveMessageRequest).getMessages()
} catch(AmazonServiceException ase) {
throw new QueueServiceException();
}
QueueServiceException是:
public class QueueServiceException extends Exception {
public QueueServiceException (String message){
super(message);
}
public QueueServiceException(String message, Throwable cause){
super(message, cause);
}
}
有什么想法吗?
干杯!