2

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

(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 更新:一个有趣的方面是调试过程。在调试时,ConnectException出现在 REPL 中。但是RiakIORuntimeException——下面的解决方案的一部分——没有出现。我想知道为什么不。

4

1 回答 1

2

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)))

回复:

riak.core> (alive? client)
false

更新:为 httpClient 添加了 RiakIORuntimeException 案例

于 2013-07-07T19:53:26.650 回答