当前位置: 首页 > 知识库问答 >
问题:

使用节点amqp库检查RabbitMQ中队列存在的方法

后星河
2023-03-14

我们正在尝试用nodejs、rabbitmq和MongoDB构建一个聊天应用程序。为了更快地传递消息,我们正在使用rabbitmq。因为我对这个概念是新的,如果有人可以的话,请帮我一下。我正在使用node amqp模块连接到rabbitmq服务器(html" target="_blank">html" target="_blank">https://www.npmjs.org/package/amqp)。

我声明如下所示的交换:

var amqp=require('amqp');var amqpconnection=amqp.createConnection({host:'localhost‘});var exchange=amqpconnection.exchange(“exchange”,{confirm:true,type:“direct”,durable:true,autodelete:false},function(exchange){});

我正在使用以下方法发布消息:

Exchange.Publish('receiver_queue',消息,{persistent:true,manditional:true},function(data){console.log(“消息发布”);console.log(data);});

我的问题是,当我发布到一个已经存在的队列时,在发布回调中,我们得到一个“false”响应,但当我发布到一个根本不存在的队列时,在发布回调中,我们仍然得到一个“false”响应;为什么会这样?有没有什么方法可以让我在发布到队列之前检查队列是否存在?

共有1个答案

时仰岳
2023-03-14

这可以被认为是一种反模式,即:大多数消息传递应用程序使用fire and forget样式,在这种样式下,发布者并不关心谁接收消息。

现在,如果您需要确保消息被路由到某个队列,那么您可以在发布消息时使用mandition标志。

要知道队列是否存在,可以使用queue_declare,但在发送queue.declare时传递passive=true标志

 类似资料:
  • 场景:微服务从RabbitMQ队列中拾取消息,将其转换为对象,然后微服务对外部服务进行REST调用。 它将处理成千上万条这样的消息,如果我们知道外部Rest服务关闭,有没有办法告诉我的消费者不要从队列中拾取消息? 我知道我可以在收到一条单独的消息后重试,但如果我知道它被拒绝了,我甚至不想再收到它。我不想在DLQ中处理成千上万的消息。 而且它感觉像一个断路器设计模式,但我找不到任何具体的例子来说明如

  • 我正试图根据这里提到的博客演示RabbitMQ信用流机制的用法:https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/ 作为演示的一部分,我想展示如果消费者无法处理消息,RabbitMQ将阻止发布者进一步发布消息。 在消费者方面,我将消息持久保存在数据库中。我已将RabbitMQ确认模

  • 在谷歌搜索了几天之后,我相信我完全迷路了。我想实现一种优先级队列,它大约有3个队列: 高优先级队列(每日),需要先处理 中等优先级队列(每周),如果队列#1中没有项目,将进行处理。(此队列中的ok消息根本不处理) 低优先级队列(每月),如果队列#1中没有项目,将进行处理 最初,我有以下流程,让消费者使用所有三个队列中的消息,并检查队列#1、#2和#3中是否有任何项目。然后我意识到这是错误的,因为:

  • 这就是事情。 我正在使用PHP AMQP从Rabbitmq读取结果队列,以便处理发送的每封电子邮件上的重要信息。完成后,我需要将该消息删除或标记为已写入,以便下次读取队列时,不会得到已处理的消息。 由于Rabbitmq服务器每小时发送超过10.000封电子邮件,每次我读取队列以处理结果发送时,脚本至少可以运行5分钟,以便处理队列中的所有消息,因此在完成后,在这5分钟内会发送数百条新消息。这使得我无

  • 我刚刚开始使用RabbitMQ和AMQP。 我有一个消息队列 我有多个消费者,我想用相同的消息做不同的事情。 RabbitMQ的大部分文档似乎都集中在循环(round-robin)上,即单个消息由单个消费者使用,负载在每个消费者之间分散。这的确是我目击的行为。 例如:生产者只有一个队列,每2秒发送一次消息: 这里有一个消费者: 如果我启动消费者两次,我可以看到每个消费者都在以循环行为消费交替消息。

  • 问题内容: 我一般只是开始使用RabbitMQ和AMQP。 我有一条消息队列 我有多个消费者,我想用 同一条消息 做不同的事情。 RabbitMQ的大多数文档似乎都集中在循环上,即单个消息由单个使用者使用,而负载则分散在每个使用者之间。我确实是这种行为。 例如:生产者只有一个队列,每2秒发送一次消息: 这是一个消费者: 如果我启动使用者两次,则 可以看到每个使用者都以循环方式使用替代消息。 例如,