如何确定应使用哪种类型的套接字从 RabbitMQ 队列获取消息?

问题描述 投票:0回答:1

我正在使用 Rabbit.js 连接到远程服务器上的队列。问题是每次我尝试连接时都会得到:

错误:服务器关闭通道:406(前提条件失败)并显示消息
“PRECONDITION_FAILED - 虚拟主机 '/' 中交换 'WorkOrderQuery.Response' 的参数 'durable' 不等价:收到 'false' 但当前为 'true'”

在Channel.C.accept(/Users/collumj/work/alpha/node_modules/rabbit.js/node_modules/amqplib/lib/channel.js:398:24)
在 Connection.mainAccept [作为接受] (/Users/collumj/work/alpha/node_modules/rabbit.js/node_modules/amqplib/lib/connection.js:63:33)

如果需要,我可以提供代码。我尝试在相关点传递带有

durable: true
的选项对象,但没有效果。一切都按正确的顺序启动,但我总是收到关于持久值设置错误的错误。

问题是:如何查看 RabbitMQ 服务器上的队列页面并确定应该使用哪种套接字来连接到它?我可以尝试一些,但盲目尝试并不是一个好方法,所以我宁愿知道我使用的是正确的类型。

这两件事可能彼此无关。如果是这样,我会很感激你的解释,因为我显然错过了它。

这是我的 RabbitMQ 队列页面的图像:

enter image description here

编辑:将我的 SUBSCRIBE 套接字更改为 PULL 套接字修复了它。仍然不确定我如何通过查看队列页面知道(或是否)。

javascript node.js sockets rabbitmq rabbit.js
1个回答
0
投票

我不知道你的库使用的抽象背后是什么,但错误消息:

“PRECONDITION_FAILED - 虚拟主机 '/' 中交换 'WorkOrderQuery.Response' 的不等价参数 'durable':收到 'false' 但当前为 'true'”

意味着在某个时刻,您的程序将交换声明为持久的,但随后尝试将其重新声明为非持久的。

在 RabbitMQ 中,每当您重新声明交换器或队列时,都必须使用创建资源时使用的相同参数

© www.soinside.com 2019 - 2024. All rights reserved.