【发布时间】:2013-12-09 04:36:47
【问题描述】:
我想编写一个 Java 接口来从特定技术中解耦,什么是转发异常的最佳方式。假设我要分离的技术是 Amazon SQS。 Amazon SQS 本质上是一种队列服务,我希望尽可能灵活,并且我希望能够轻松地将 SQS 替换为 RabbitMQ 或其他队列服务。
这是我目前所拥有的:
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 开发工具包,本质上是 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);
}
}
有什么想法吗?
干杯!
【问题讨论】:
标签: java interface amazon-web-services decoupling