gpt4 book ai didi

node.js - RabbitMQ 是否有相当于 "ping"的值?如何诊断交换器或队列是否正在广播?

转载 作者:搜寻专家 更新时间:2023-10-31 22:16:20 24 4
gpt4 key购买 nike

我正在使用 postwait/node-amqp ( link ) 连接到我们组织中的各种 RabbitMQ 交换器和队列。

当我的项目从开发转移到生产时,我遇到了几个问题,如队列设置不正确或密码不正确等。在后一种情况下,很明显,我会收到 ECONNREFUSED 错误。但在第一种情况下,我没有收到任何错误,只是连接超时。

给定像 amqp://USER:PASS@messaging.abc.xyz.com 这样的 URI,我如何确定名为“FooWorkItems.Work”的队列是否正在接受连接以进行监听?什么是最少的代码,相当于检查 API 是否正在监听或服务器是否已启动并正在监听 ping 端口?

代码:

if (this.amqpLib == null) {
this.amqpLib = require('amqp');
}
this.connection = this.amqpLib.createConnection({
url: this.endpoint
});

this.connection.on('ready', (function(_this) {
return function() {
var evt, _fn, _fn1, _i, _j, _len, _len1, _ref, _ref1;
_this.logger.info("" + _this.stepInfo + " connected to " + _this.endpoint + "; connecting to " + queueName + " now.");
if (_this.fullLogging) {
_ref = ['connect', 'heartbeat', 'data'];
_fn = function(evt) {
return _this.connection.on(evt, function() {
_this.logger.trace("" + _this.stepInfo + " AMQP event: " + evt);
if (arguments != null) {
return _this.logger.trace({
args: arguments
});
}
});
};
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
evt = _ref[_i];
_fn(evt);
}
_ref1 = ['error', 'close', 'blocked', 'unblocked'];
_fn1 = function(evt) {
return _this.connection.on(evt, function() {
if (evt !== 'close') {
return _this.logger.error("" + _this.stepInfo + " AMQP event: " + evt);
} else {
return _this.logger.warn("" + _this.stepInfo + " AMQP event: " + evt);
}
});
};
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
evt = _ref1[_j];
_fn1(evt);
}
}
return _this.connection.queue(_this.queueName, {
passive: true
}, function(q) {
logger.debug("" + stepInfo + " connected to queue " + queueName + ". Init complete.");
return q.subscribe(function(message, headers, deliveryInfo, messageObject) {
logger.trace("" + stepInfo + " recvd message");
return logger.trace({
headers: headers
});
});
});
};

最佳答案

在 amqp 中,队列和交换器是与连接无关的概念,它们不监听或广播,您无法连接到它们,只能连接到代理。

RabbitMQ 服务器当然接受网络连接,并且 the protocol defines传输之上的逻辑连接,此连接包含心跳,可使用此库中的 heartbeat 选项进行配置。

如您所说,连接错误,包括超时需要在启动时处理,其余的您可以依赖心跳,类似于“ping”机制。如果连接中断并且设置了 heartbeat 参数,您的库将简单地抛出一个错误,因此您无需重新实现它。

您还应该查看 postwait/node-ampq 中的reconnect 设置,因为它可能会自动处理某些网络故障模式。

关于node.js - RabbitMQ 是否有相当于 "ping"的值?如何诊断交换器或队列是否正在广播?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36137343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com