如何处理Couchbase中的连接故障?

时间:2013-08-16 15:55:16

标签: php couchbase

我正在使用Couchbase使用php_couchbaselibcouchbase在IIS 7下使用PHP 5.4 NTS对RDBS结果进行短期缓存。如果你把RDBS选择放在一个回调函数中代码是相当不错的,但我正在寻找一个更好的理解当事情崩溃时该怎么做。

SO建议我看看这些问题:Couchbase PHP SDK: How to detect couchbase connection failure?。 Saad的代码不会抛出异常,因为$cb永远不会是假的。 (我不确定如何解决马特关于计算错误的建议;我无法将其丢弃。)

即使数据库处于脱机状态,我也可以使用对象实例化工作;由于连接可能随时关闭,因此代码应检查每个操作的结果。但libcouchbase似乎不愿意让失败成为一种选择。

在下面的代码中(我将连接到一个伪造的端口),它永远不会抛出异常,只是“警告”。 ("Warning: Failed to establish libcouchbase connection to server: Connection failure in H:\www\root\no.php on line 4", "Warning: There is no active connection to couchbase in H:\www\root\no.php on line 9")。

Couchbase->add返回一个值,但返回的值无法显示“此键已存在”与“服务器机房处于激活状态”之间的差异。

测试操作是否成功的正确方法是什么?我是否需要捕获警告?

<?php

try {
  $cb = new Couchbase("localhost:8099", "", ""); // should be port 8091
} catch (CouchbaseException $e) {
    echo "Never fires, even when db down (this is OK...instantiation did work).";
};

if ($cb->add("hello","hello world")) {
  echo "Called if DB up and key does not exist";
} else {
  echo "Called if DB down or key exists";
}

try {
  $foo = $cb->add("hello","hello world");
} catch (Exception $e) {
    echo "Never fires, even when db down";
};

try {
  $foo = $cb->add("hello","hello world");
} catch (CouchbaseException $e) {
    echo "Never fires, even when db down";
};

print $cb->get("hello");

?>

我也试过this code from the documentation;没有异常抛出。也许我没有启用php异常处理? (对不起,如果我是白痴,我写的PHP代码不多。)

我对派对线感到有点沮丧,因为Couchbase是一个分布式冗余nosql等等等等解决方案,所以我们不必过多考虑服务可用性。代码总是需要知道何时数据被抛出。

感谢您的任何建议!

罗布

1 个答案:

答案 0 :(得分:1)

我必须检查以确定,但我相信这个问题与Windows构建有点落后的事实有关。如果我没记错的话,在早期的1.1.x系列中有异常处理的问题。从源代码构建可能是有序的。我会看看能否为您提供更新版本。