【问题标题】:Writing a good interface to de-couple from a particular technology ... what to do about exceptions?编写一个好的接口来与特定技术分离……如何处理异常?
【发布时间】: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


    【解决方案1】:

    你将不得不做exception wrapping。春天就是这样做的。基本上捕获提供者特定的异常并作为您的异常重新抛出。

    【讨论】:

    • 谢谢@Rob ..刚刚编辑了 QueueServiceException 类...你怎么看?这是正确的异常包装还是我做错了什么?
    • 是的,就是这样。
    猜你喜欢
    • 1970-01-01
    • 2018-01-04
    • 2021-09-30
    • 2023-03-29
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多