【问题标题】:Catching specific exception from riak-java-client from Clojure从 Clojure 捕获 riak-java-client 的特定异常
【发布时间】:2013-07-07 19:18:23
【问题描述】:

我使用以下 Clojure 代码从 riak-java-client 包装 .ping。但我不喜欢这样直率地捕捉异常:

(ns myapp.riak
  (:import [com.basho.riak.client IRiakClient]))

(set! *warn-on-reflection* true)

(defn alive?
  "Is Riak client alive? Returns true or false, unlike `.ping`."
  [^IRiakClient client]
  (try
    (.ping client) true
    (catch Exception e false)))

我试着捕捉这些:

  • com.basho.riak.client.RiakException
  • java.net.ConnectException
  • java.io.IOException

但这些(单独或组合)都不起作用。

我做错了什么?

美国东部时间下午 3:56 更新:我正在使用 RiakFactory/httpClient,以防万一。

4:13 pm EDT 更新:一个有趣的方面是调试过程。在调试时,ConnectException 出现在 REPL 中。但是RiakIORuntimeException——下面的解决方案的一部分——没有出现。我想知道为什么不。

【问题讨论】:

    标签: java exception clojure riak


    【解决方案1】:

    ping 抛出 RiakException - https://github.com/basho/riak-java-client/blob/master/src/main/java/com/basho/riak/client/DefaultRiakClient.java#L210

    下一个功能对我有用。我没有安装 riak,它返回 false

    (ns riak.core
      (:import [com.basho.riak.client IRiakClient RiakFactory RiakException]
               [com.basho.riak.client.http.response RiakIORuntimeException]))
    
    (set! *warn-on-reflection* true)
    ;; (def client (RiakFactory/pbcClient))
    (def client (RiakFactory/httpClient))
    
    (defn alive?
      "Is Riak client alive? Returns true or false, unlike `.ping`."
      [^IRiakClient client]
      (try
        (.ping client)
        true
        (catch RiakException e false)
        (catch RiakIORuntimeException e false)))
    

    REPL:

    riak.core> (alive? client)
    false
    

    更新:为 httpClient 添加了 RiakIORuntimeException 案例

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-11
      • 2018-06-28
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多