Jig*_*eth 26 .net queue message-queue not-exists rabbitmq
如何检查消息队列是否已存在?
我有2个不同的应用程序,一个创建队列,另一个从该队列读取.
因此,如果我首先运行从队列中读取的客户端,而不是崩溃.
所以为了避免我想首先检查队列是否存在.
这是我如何读取队列的代码片段:
QueueingBasicConsumer <ConsumerName> = new QueueingBasicConsumer(<ChannelName>);
<ChannelName>.BasicConsume("<queuename>", null, <ConsumerName>);
BasicDeliverEventArgs e = (BasicDeliverEventArgs)<ConsumerName>.Queue.Dequeue();
Run Code Online (Sandbox Code Playgroud)
scv*_*lex 57
不要打扰检查.
queue.declare是幂等操作.所以,如果你运行一次,两次,N次,结果仍然是相同的.
如果要确保队列存在,只需在使用之前声明它.确保每次都以相同的耐久性,排他性,自动删除的方式声明它,否则你会得到一个例外.
如果您确实需要检查队列是否存在(通常不需要),请执行队列的被动声明.如果队列存在,则该操作成功;如果不存在,则该操作失败.
小智 11
将以下代码放入 try catch 部分。如果队列或交换器不存在,则会抛出错误。如果存在它不会做任何事情。
var channel = connection.CreateModel();
channel.ExchangeDeclarePassive(sExchangeName);
QueueDeclareOk ok = channel.QueueDeclarePassive(sQueueName);
if (ok.MessageCount > 0)
{
// Bind the queue to the exchange
channel.QueueBind(sQueueName, sExchangeName, string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
目前,您可以通过RabbitMQ Management HTTP API了解该信息以及更多信息。
例如,要知道此时是否有一个队列是 up 的,可以调用该 API 的GET /api/queues/vhost/name接口。