1

这可能不是一个错误,而是我理解的一个差距,但把它放在这里是因为害怕到目前为止还没有找到方法。感谢您是否可以提供您的意见。

我正在尝试通过两个选项连接到我的 3 个节点的 Riak 集群(托管在 AWS 上) - 1)使用 ejabberd 服务器,以及 2)使用节点服务器。

在我将主机名和端口放入 ejabberd 配置后,从 ejabberd 服务器连接成功,但是当我使用简单的节点服务器(下面的代码)时,我收到“错误:没有可用于执行命令的 RiakNodes”。错误。请问我在这里遗漏了什么 - 我可以确认 3 个节点确实与 Riak 一起运行?请注意,如果我不在节点上执行客户端 ping,服务器不会抛出任何错误,因此它可能与 ping 的处理方式有关。如果其中一个节点被关闭,同一台服务器(没有 ping)会给出 ECONNREFUSED 错误。很明显,连接正在通过,但不是 ping。

如果我错过了这里的一些基本内容,请道歉......即使 Riak 节点的防火墙设置已设置为所有入站,所以它不是 ejabberd 服务器具有访问权限但不是节点服务器的情况。

var async = require('async');
var assert = require('assert');
var logger = require('winston');
var Riak = require('basho-riak-client');

logger.remove(logger.transports.Console);
logger.add(logger.transports.Console, {
level : 'debug',
colorize : true,
timestamp : true
});

var nodes = [
'ip-xx-xx-xx-xx:8087',
'ip-xx-xx-xx-xx:8087',
'ip-xx-xx-xx-xx:8087'
];

var client = new Riak.Client(nodes, function (err, c) {
logger.info('Now inside Riak.Client');

// NB: at this point the client is fully initialized, and
// 'client' and 'c' are the same object
});

client.ping(function (err, rslt) {
logger.info('Now entered client.ping');
if (err) {
logger.info('There is an error encountered in client.ping');
throw new Error(err);
} else {
// On success, ping returns true
logger.info('client.ping has resulted in success!');
assert(rslt === true);
}
});
4

0 回答 0