在切换到 stomp-client 时使用 node-amqp 库进行身份验证失败,它可以工作

use*_*624 5 stomp amqp node.js node-amqp

我正在使用node-amqp库连接到在线stomp服务,在我使用stomp-client之前,它连接非常成功,但它不支持自动故障检测和重新连接,所以我想切换到node-amqp 提供更强大的支持。

var amqp = require('amqp');
var option = { 
  host: 'host'
, port: 61618
, login: 'my username'
, password: 'my password'
};

var implOpts = {
      reconnect: true,
      reconnectBackoffStrategy: 'exponential',
      reconnectBackoffTime: 500
};

var connection  = amqp.createConnection(option,implOpts);
connection.addListener('ready', function(){
    console.log('ready connection ');

});

connection.on('error', function (error) {
    console.log('Connection error' ,error);

});

connection.on('close', function () {
    console.log('Connection close ');

});
Run Code Online (Sandbox Code Playgroud)

主机名、密码、用户名和端口正确并且在 stomp-client 库示例中工作。但是,通过使用上面的代码,我收到一条错误消息:连接错误 { message: '连接结束:可能是由于身份验证失败。' }。我查看了代码,没有发现我的身份验证或代码有任何问题。

这是 stomp-client 库中的工作代码。

var StompClient = require('stomp-client').StompClient;

var client = new StompClient('host', 61618, 'my username', 'my password', '1.0');

client.connect(function(sessionId) {
   console.log('Trying to connect the real time service...');

}); 
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何使用node-amqp来连接stomp服务

aet*_*ker 0

不确定你是否找到了这个问题的答案,但我发现自己在这个问题上伤透了脑筋,并在谷歌搜索的顶部附近找到了这个,所以我想我应该分享我的发现:

一些快速信息;

  • 兔子MQ 3.5.6
  • NodeJS 6.2.2
  • amqplib 0.4.2

经过一番挖掘后,我在 github 上找到了该项目,并深入研究测试以找到https://github.com/squaremo/amqp.node/blob/master/test/connect.js,其中有一个简单的身份验证示例。我发现的关键是您必须调用一个特殊函数来格式化凭据,然后将它们作为对象传递:

var credentials = require('amqplib/lib/credentials');
var options = {};
options.credentials = credentials.plain(configuration.rabbitmq.user, configuration.rabbitmq.pass);
amqp.connect(connstr, options ....
Run Code Online (Sandbox Code Playgroud)

还提到将用户名和密码嵌入到 URL 中,即:

amqp://user:pass@server:port
Run Code Online (Sandbox Code Playgroud)

然而这对我的情况不起作用。