无法使用 Node.js 连接到 Apache ActiveMQ

2024-01-21

背景

尝试使用 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(使用前将#替换为@)

无法使用 Node.js 连接到 Apache ActiveMQ 的相关文章

  • 如何设置黄瓜环境变量

    我有以下 package json name newcucumber version 1 0 0 main index js scripts test node modules bin cucumber js firefox node mo
  • Express.js - 监听关闭

    我有一个使用 Express 的 Node js 应用程序 在该应用程序中 我有一个如下所示的块 const app require app const port process env PORT 8080 const server app
  • JavaScript - 类根据条件扩展

    事情是这样的 我有一个名为 A 的主课 我希望这个班级能够扩展 B 级 class A extends B 但事实上 我希望 B 类在特定条件下扩展 C D 或 E class B extends B1 or class B extends
  • 在express中root后通过可选参数传递路由控制?

    我正在开发一个简单的网址缩短应用程序 并有以下快速路线 app get function req res res render index link null app post function req res function makeR
  • Google 钱包 API Codelabs 示例权限被拒绝

    我正在研究使用 Google 钱包通过 Web jwt 界面存储条形码 用于电子处方 如果重要的话 的可行性 https codelabs developers google com add to wallet web 0 https co
  • Node.js“需要”其他文件而不需要命名空间

    我正在将代码库从 100 浏览器端切换为浏览器端和服务器端的混合 我发现的问题是 要让我的代码使用 node js 运行 我必须使用模块 为了将我的代码变成模块 需要对几乎所有代码进行巨大的重构 原因是在浏览器上 许多功能是跨文件使用的 而
  • Grunt-browserify+mapify+coffeescript = 未通过相对路径找到模块

    我尝试让 grunt browserify 使用 Coffeescript 的相对路径 但当我尝试构建源代码时总是收到错误消息 gt gt Error module src app utils includeMixin not found
  • 将 Node.js(用于实时通知)添加到现有 PHP 应用程序

    我有一个现有的 PHP 应用程序 我需要向其中添加实时通知 为了实现这一点 我安装了node js 打算添加socket io以实现所有实时功能 然而 尽管在过去的三个小时里研究并试图弄清楚如何将两者结合起来 但我发现自己并没有更接近于获得
  • 如何将 node_modules 包含在单独的 browserify 供应商包中

    我正在尝试将 AngularJS 应用程序转换为使用 browserify 我已经使用 napa 在 node modules 中安装了所有的 Bower 包 现在我想将它们浏览到一个单独的供应商包中 并将它们声明为 外部 依赖项 我想给他
  • lessc:未找到命令

    我使用的是 OS X 8 并且是 Node LESS 的新手 我以为我之前安装了 lessc 当我转到 usr local bin 时 我看到了 lessc 但对于我的生活来说 我无法运行它 每当我运行它时 我都会看到 bash lessc
  • 使用 NVM 安装多个版本的 node.js (Ubuntu)

    如何使用 Ubuntu 在 Ubuntu 中安装多个版本的 Node jsNVM https github com creationix nvm 先验知识 如何使用终端 例如 您可以使用gnome terminal 安装依赖项 sudo a
  • 如何从 Node.js 中的 Http.IncomingMessage 检测 http 与 https

    给定一个Http IncomingMessage由一个创建http s Server为了响应请求 检测请求是否是 http 与 https 的正确 推荐方法是什么 一些我不知道的随机想法是否正确 检查端口 seems wrong might
  • 没有导出的成员/节点模块

    我刚刚开始使用 5 分钟快速入门找到的 Angular 2 Typescripthere https angular io docs ts latest quickstart html 我遇到了一个看起来很常见的问题 但可能有点不同 我遇到
  • 使用 mosca MQTT 的请求响应模式

    有没有办法使用 mosca MQTT 实现请求响应模式 以 检查客户端的回复 如果在预期时间内未收到预期回复 则重新发布 我相信这在 Mqtt 5 中是可能的 但截至目前 我必须使用 QoS 1 的 Mosca 代理 支持直到 Mqtt 3
  • 有没有办法将击键发送到节点中的终端?

    我特别想发送 ctrl l 清除终端 这样每次我测试脚本时终端都是干净的 如果您使用的是 Linux console log 033 2J 如果你使用的是 Windows 我认为这可行 将光标设置在 0 0 var util require
  • 如何让我的云代码在我的 Worker dyno(而不是 Web dyno)上运行?

    我在heroku 上部署了一个解析服务器 我正在解析服务器上运行一些云代码 该代码需要几分钟才能运行 并且在 Web dyno 上运行时会导致 Heroku 出现超时错误 heroku router at error code H12 de
  • 有什么不同? .on“连接”与.on“连接”

    我很难理解以下之间的区别 io on connection function io on connect function 可能是一个相当原始的问题 但是我无法找到有关它的明确文档 很想了解其中的区别 这些是同一事物的不同名称 正如所写so
  • TypeError [ERR_INVALID_ARG_TYPE]:“listener”参数必须是 Function 类型

    我这里有一个小问题 events js 200抛出新错误 ERR INVALID ARG TYPE listener Function listener 类型错误 ERR INVALID ARG TYPE 侦听器 参数必须是类型 功能 收到
  • Laravel Homestead 中 npm 安装错误有解决方案吗?

    Windows 10 家园 虚拟盒6 0 8 流浪者2 2 5 节点 v12 5 0 npm v6 10 1 我想做的就是在新安装的 Laravel 应用程序中执行 npm install 命令 但我不断收到错误 经过两天的谷歌搜索并尝试了
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex

随机推荐