如何处理Couchbase中的连接故障


How to handle connection failures in Couchbase?

我使用Couchbase在IIS 7下使用php_couchbaselibcouchbase对PHP 5.4 NTS中的RDBS结果进行短期缓存。如果你把RDBS select放在回调函数中,代码会很好,但我希望更好地理解当事情崩溃时该怎么办。

所以建议我看看这个问题:Couchbase PHP SDK:如何检测Couchbase连接失败?。Saad的代码不会抛出异常,因为$cb从不为false。(我不知道该如何看待马特关于计数错误的建议;我没能让它抛出任何错误。)

即使在数据库离线的情况下,我也能很好地处理对象实例化;由于连接随时可能断开,代码应该检查每个操作的结果。但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返回一个值,但返回的值不能显示"该密钥已存在"answers"服务器机房着火"之间的区别。

测试手术是否成功的正确方法是什么?我需要诱捕警告吗?

<?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");
?>

我还从文档中尝试了这个代码;没有引发异常。也许我没有打开php异常处理?(很抱歉,如果我在这里是个白痴,我不会写太多php代码。)

我有点失望的是,由于Couchbase是一个分布式冗余nosql等等的解决方案,我们不必太多考虑服务可用性。代码总是需要知道数据何时被扔到地板上。

谢谢你的建议!

Rob

我必须进行检查以确定,但我认为问题与Windows版本有点落后有关。如果我没有记错的话,在早期的1.1.x系列中,异常处理有一个问题。从源头构建可能是有序的。我会看看我们是否能给你一个更新的版本。