首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用ActiveMQ连接到Apache ActiveMQ

无法使用ActiveMQ连接到Apache ActiveMQ
EN

Stack Overflow用户
提问于 2017-05-09 15:04:09
回答 2查看 6.4K关注 0票数 2

背景

试图使用AMQP1.0协议通过ActiveMQ连接到我的Apache。我正在使用以下代码(改编自自述的原始示例):

代码语言:javascript
复制
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));

错误

执行失败,出现下列应用程序错误:

Workspace/activemq/node_modules/amqp10/lib/frames.js:64 stream.write(缓冲区,回调);^ (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/frames.js:64:9) at Connection.sendFrame (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:329:10) at Connection._sendCloseFrame (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:491:8) at Connection._receiveAny,TypeError:无法读取Object.frames.writeFrame上的Object.frames.writeFrame属性“写入”(/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:413:12) at Connection._receiveData (/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:358:8) at NetTransport.(/home/pedro/Workspace/activemq/node_modules/amqp10/lib/connection.js:516:38) at emitOne (events.js:96:13) at NetTransport.emit (events.js:191:7) at Socket。(/home/pedro/Workspace/activemq/node_modules/amqp10/lib/transport/net_transport.js:26:49) at emitOne (events.js:96:13) at Socket.emit (events.js:191:7) at readableAddChunk (_stream_readable.js:178:18) at Socket.Readable.push (_stream_readable.js:136:10) at TCP.onread (net.js:560:20)

当ActiveMQ拒绝具有以下消息的请求时:

警告从非AMQPv1.0客户端进行的连接尝试。AMQP,0,1,0,0警告:传输连接到: tcp://127.0.0.1:53188失败:尝试使用不支持的org.apache.activemq.transport.amqp.AmqpProtocolException:从客户端连接

我试过的

我试图实现这个问题中描述的修复:

但也没用。还尝试在url中指定端口5672,但没有运气。

问题

此时,我确信应用程序失败了,因为ActiveMQ拒绝请求,因为它是无效的。

  • 有什么办法解决这个问题吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 10:56:57

解决方案

在ActiveMQ论坛上四处询问之后,事实证明@Tim是正确的。引用用户Gordon Sim-2的话:

截至5.14 (.)ActiveMQ需要一个SASL层,即使您使用匿名进行身份验证。客户端的示例通常不以任何方式显式身份验证(.)

要解决这个问题,有两个选择。

选项1-更改代码

第一个是修改代码,这就是我想要的:

要让amqp10客户端使用SASL层,只需在连接上指定一个saslMechanism覆盖。 client.connect(uri,{‘sasl机理’:‘匿名’})

这种方法是由另一个名为Node.js的AMQP1.0 rhea库的创建者提出的,我强烈建议,如果您正在阅读它,请检查它。

选项2-更改代理配置文件

第二个问题,正如Tim所建议的,是更改代理配置文件。我建议阅读他的帖子,如果你选择这种方法,因为它是更完整的。

票数 8
EN

Stack Overflow用户

发布于 2017-05-09 16:47:43

最可能的问题是客户端没有在connect上使用基于SASL的身份验证请求,而只是试图直接连接。代理默认要求客户端在其打开握手时使用SASL,即使身份验证机制仅为“匿名”,因此可以根据现有的任何代理安全策略验证客户端。

您可以通过将wireFormat.allowNonSaslConnections=true添加到代理的AMQP TransportConnector配置中来禁用此检查,然后查看是否可以连接。这可能是一种短期解决方案,可以让您在生产代理上运行,但您不应该使用该选项,并且应该在用户/密码身份验证中具有有效的安全策略。

了解代理配置这里

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43873400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档