背景
尝试使用 AMQP 1.0 协议通过以下方式连接到我的 Apache ActiveMQ 代理amqp10 https://www.npmjs.com/package/amqp10。我使用以下代码(改编自自述文件中的原始示例):
const AMQPClient = require("amqp10").Client;
const Promise = require("bluebird");
//Fix from: https://github.com/noodlefrenzy/node-amqp10/issues/241
const activeMQPolicy = require("amqp10").Policy;
const client = new AMQPClient(activeMQPolicy.ActiveMQ);
const setUp = () => {
return Promise.all([
client.createReceiver("amq.topic"),
client.createSender("amq.topic")
]);
};
client.connect("amqp://localhost")
.then(setUp)
.spread(function (receiver, sender) {
receiver.on("errorReceived", function (err) {
if (err) {
console.log(`failed with error: ${err}`);
return;
}
receiver.on("message", message => console.log(`Rx message: ${message.body}`));
return sender.send({ key: "Value" });
});
})
.error( err => console.log("error: ", err));
Error
执行失败并出现以下应用程序错误:
工作区/activemq/node_modules/amqp10/lib/frames.js:64
流.write(缓冲区,回调);
^
类型错误:无法读取 null 的属性“write”
在 Object.frames.writeFrame (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/frames.js:64:9)
在 Connection.sendFrame (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:329:10)
在 Connection._sendCloseFrame (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:491:8)
在 Connection._receiveAny (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:413:12)
在 Connection._receiveData (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:358:8)
在网络传输。 (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:516:38)
在emitOne (events.js:96:13)
在 NetTransport.emit (events.js:191:7)
在套接字。 (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/transport/net_transport.js:26:49)
在emitOne (events.js:96:13)
在 Socket.emit (events.js:191:7)
在 readAddChunk (_stream_read.js:178:18)
在 Socket.Readable.push (_stream_read.js:136:10)
在 TCP.onread (net.js:560:20)
ActiveMQ 拒绝请求并显示以下消息:
警告 |来自非 AMQP v1.0 客户端的连接尝试。 AMQP,0,1,0,0
警告 |传输连接到:tcp://127.0.0.1:53188 失败:org.apache.activemq.transport.amqp.AmqpProtocolException:尝试使用不支持的 AMQP 从客户端进行连接
我尝试过的
我尝试实施此问题中描述的修复:
- https://github.com/noodlefrenzy/node-amqp10/issues/241 https://github.com/noodlefrenzy/node-amqp10/issues/241
但它也不起作用。还尝试在 url 中指定端口 5672,但没有成功。
Question
此时我非常确定应用程序写入失败,因为 ActiveMQ 将请求视为无效而拒绝。
Solution
在 ActiveMQ 论坛中询问后,事实证明@Tim 是正确的。引用用户 Gordon Sim-2 的话:
从 5.14 (...) 开始,ActiveMQ 需要 SASL 层,即使您使用
匿名进行身份验证。客户的例子通常不会
以任何方式显式验证(...)
要解决此问题,有两种选择。
选项 1 - 更改代码
第一个是更改代码,这就是我正在寻找的:
要让 amqp10 客户端使用 SASL 层,只需指定一个
连接上的 saslMechanism 覆盖,例如
client.connect(uri, {'saslMechanism':'ANONYMOUS'})
这种方法是由另一个名为 AMQP 1.0 Node.js 库的创建者建议的rhea https://www.npmjs.com/package/rhea如果您正在阅读本文,我强烈建议您检查一下。
选项 2 - 更改代理配置文件
正如蒂姆建议的,第二个是更改代理配置文件。如果您选择这种方法,我建议您阅读他的文章,因为它更完整。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)