这可能不是一个错误,而是我的理解中的差距,但把它放在这里因为害怕到目前为止还没有找到方法。如果您能提供您的意见,请欣赏。
我尝试通过两个选项连接到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);
}
});